本帖最后由 tineseack_bk 于 2020-4-6 10:47 编辑 
是这样,最近在做一个海战类型的图,主要玩法就是玩家操控一个舰艇单位(一堆实体堆砌而成),需要用到一些对舰艇单位的高频操作,包括但不限于一些调用 nbt 转化为分数的计算。单人测试下系统流畅运行,但是放到服务器中就会出现一定的跳 tick 现象。因为我对服务端的卡顿原因了解甚少,做优化也暂时没有大方向,故想了解一些各位的作图经验……下面这里对问题进行一些简述:
我在服务器自行测试了一下,推测应该是这个转向的模块计算量比较大导致跳 tick。随后我 functioon #minecraft:tick 得到的返回值是执行了 800+ 条命令,而且是在仅有一条船的情况下。我并不清楚什么样的命令执行量会对服务端造成比较大的负荷。我也猜测问题出在选择器上的可能比较大。
可能问题有些模糊,我现在主要是不太清楚为什么服务器会开始跳 tick 这些(客户端并没有卡顿),如果各位有类似的作图经验能提供一下感激不尽!
(参考过这个贴子的内容 https://www.mcbbs.net/forum.php?mod=viewthread&tid=994402&page=1&authorid=2742718 对选择器进行了一定程度的优化,然而成效还是不大。)
是这样,最近在做一个海战类型的图,主要玩法就是玩家操控一个舰艇单位(一堆实体堆砌而成),需要用到一些对舰艇单位的高频操作,包括但不限于一些调用 nbt 转化为分数的计算。单人测试下系统流畅运行,但是放到服务器中就会出现一定的跳 tick 现象。因为我对服务端的卡顿原因了解甚少,做优化也暂时没有大方向,故想了解一些各位的作图经验……下面这里对问题进行一些简述:
- 每个单位是由几个盔甲架套模型 + 若干个生物实体作为 hitbox 来检测炮弹击中,每个单位涉及到大约 10 个实体。对这些实体的操作有:
 
- 高频 tp,确保它们相对于一个核心盔甲架是静止的;
- 对一个核心盔甲架高频执行运动模块,通过 execute store 把分数转化为 Motion
- 对上面这个核心盔甲架执行转向模块,思路是:检测玩家和这个盔甲架的视角,做差,然后通过 tp 逐步减少视角差,当视角差小于某个值时停止 tp,即达到 “让盔甲架视角缓慢向玩家靠齐” 的效果;
- 对若干个炮塔盔甲架也执行这样的转向模块,预计每艘船的炮塔在 3-5 个不等。
 
- 由于是地图,我把不同玩家和对应的船编号,然后通过穷举来确保一些操作的精确性,这就还有可能出现运算量叠加的情况。
 
我在服务器自行测试了一下,推测应该是这个转向的模块计算量比较大导致跳 tick。随后我 functioon #minecraft:tick 得到的返回值是执行了 800+ 条命令,而且是在仅有一条船的情况下。我并不清楚什么样的命令执行量会对服务端造成比较大的负荷。我也猜测问题出在选择器上的可能比较大。
可能问题有些模糊,我现在主要是不太清楚为什么服务器会开始跳 tick 这些(客户端并没有卡顿),如果各位有类似的作图经验能提供一下感激不尽!
(参考过这个贴子的内容 https://www.mcbbs.net/forum.php?mod=viewthread&tid=994402&page=1&authorid=2742718 对选择器进行了一定程度的优化,然而成效还是不大。)
安装个optifine
用fabric和optfabric
用fabric和optfabric
你检查炮弹击中是怎么写的?
这一步又是怎么写的?
检测玩家和这个盔甲架的视角,做差
这一步又是怎么写的?
 本帖最后由 tineseack_bk 于 2020-4-6 12:56 编辑 
1.检测炮弹击中是直接抓 HurtTime:9s 的实体,因为需要判定击中了船的哪个部位
2.视角是:高频执行这个:
movement:exe_of_accel/accel1:
chyx 发表于 2020-4-6 11:45
你检查炮弹击中是怎么写的?
这一步又是怎么写的?
1.检测炮弹击中是直接抓 HurtTime:9s 的实体,因为需要判定击中了船的哪个部位
2.视角是:高频执行这个:
movement:exe_of_accel/accel1:
安装优化mod
安装卡服优化插件,bbs里面就有的
晴路卡发现没有自己能回答的帖子了
所以来到了这里
没人能救你了,金粒能给我吗?
(一天
所以来到了这里
没人能救你了,金粒能给我吗?
(一天
掉落物定时清理
经常清除缓存
经常清除缓存