Minecraft(我的世界)中文论坛

标题: [CBL∫2b]指令方块进阶教程——模块 §З : 优化模块 [打印本页]

作者: ⭐✔️    时间: 2016-1-24 08:09
标题: [CBL∫2b]指令方块进阶教程——模块 §З : 优化模块
(附)优化模块
这里将解答所有指令玩家最头疼的问题:
模块优化

不少客观因素让我们认为模块无法胜任它的实用性——因为卡顿,
因此不少玩家决定敬而远之改用逻辑组尽量节省指令方块

其实这都是客观因素,真正让模块卡顿原因有三种:

假如我千辛万苦完成了一个模块,却发现它体型庞大,自己单人掉帧,多人更是上千延迟
那么其实有方法让其变得如同普通游戏一样流畅

首先需要了解游戏的区块资源分配原理
最小资源:BlockUpdatePack - 单方块更新
普通资源:BlocksUpdatePack - 多方块(<64)更新
超大资源:ChunkUpdatePack - 区块(≥64)更新

这个原理用于单人;服务器都使用。
单人不明显,但是试想一下多人中,如果一个区块被更新,那么要同时发送给n个玩家
此时不仅是上传延迟,也包括对主机CPU多重压力,这是卡顿的主要原因。

要避免资源卡顿,需要优化一个区块的指令方块更新少于64,如下
只要数量达到63,必须重新更换一个区块。

除了图中摆法外,更实用的是线型,有效的向邻区块延伸

多人加载中除了资源的共享,也需要加载使用指令的区块
而服务器区块负荷量近似为:
=区块资源*区块刷新率*人数

资源我们知道如何减少,人数是个不可控的量,刷新率也有方法降低:(针对被加载的区块)
高频率:出生点区块 - 玩家出生点 16*16 Chunk
中频率:出生点预加载区块 - 出生点 64*64 Chunk
低频率:出生点忽略加载区块 - 玩家出生点 64*64 Chunk外

为了降低刷新率,节省资源,至少要把模块放在玩家出生点区块(最好也是玩家活动范围)的1024格外
但是需要注意使用区块加载器让模块一直更新
  • 优化逻辑


在所有客观因素外的一个主观因素就是逻辑冗繁,
例如一个并联枚举其实可以构建一个如图的空通道来共用输出

还有很多逻辑优化方式,需要自己留心并践行



讲了这么多,总结就三点
  • 将一个区块的指令方块控制在64个以下
  • 将模块移到出生点区块1024格外
  • 尽可能简化指令

这样基本的服务器都能带动4096(不含区块加载资源)
单人能带动几w甚至10w+指令方块



模块1.9补丁总索引

模块总索引

[groupid=546]Command Block Logic[/groupid]
作者: 250=mo    时间: 2016-1-24 09:01
感觉打开了新世纪的大门(滚到最下点开索引)
作者: toolate    时间: 2016-1-24 09:05
6666666666666666
作者: 若颜mm    时间: 2016-1-24 09:31
666666666666666666
作者: 格林    时间: 2016-1-24 09:55
那么就是指令方块优化MC了?
但是用在服务器上还是感觉插件好,这个适合单人。

作者: 840196733mw    时间: 2016-3-25 18:44


跪下了,这就是我做的东西卡到死,不敢发出来的原因吗 一个区块堆了一大堆东西(为了方便设置出生区块来加载)

求区块加载器
作者: ruhuasiyu    时间: 2016-10-24 10:17
如果把rcb换成ccb能否减少卡顿?就是说本来有很多想图二那样的结构,现在用ccb连成一个长链会不会减少卡顿?
作者: ⭐✔️    时间: 2016-10-24 21:17
ruhuasiyu 发表于 2016-10-24 10:17
如果把rcb换成ccb能否减少卡顿?就是说本来有很多想图二那样的结构,现在用ccb连成一个长链会不会减少卡顿 ...

实际上ccb也是伴随着方块的更新,将Rcb换成ccb成效不大
作者: brooke_zb    时间: 2016-12-30 12:21
可是如果把模块都集中在一个区块里,就只有一个超大资源的区块在加载,而其他都是最小资源加载(这里指的都是CB吧),要是按你的方法的话,就有许多普通资源的加载,到底是哪个好呢?
作者: ⭐✔️    时间: 2016-12-30 18:19
brooke1999 发表于 2016-12-30 12:21
可是如果把模块都集中在一个区块里,就只有一个超大资源的区块在加载,而其他都是最小资源加载(这里指的都 ...

一个很简单的例子,你养了一只猫并且假设它不会主动进食,你是一次喂完让它撑死还是有饮食规律地去喂养?
类似的,我们说的刷新其实是代码反复调用,这个调用周期在标准情况下为0.05s。瞬间调用大量资源会减少该周期,因此你出现了掉帧,在服务器中则是明显的卡顿。你可以自己衡量到底是哪种方式更优。
我们已经用帖子中的方法制作了许多含有大量模块的地图,通过实测确定结果后我们才发布出来,这并不只是理论而是经验之谈。




欢迎光临 Minecraft(我的世界)中文论坛 (https://www.mcbbs.net/) Powered by Discuz! X3.5