第一百五十章 如何看懂调试界面 ③
在上一章中,作者提到了调试界面左边第二阵第四行之后的内容,在1.13.2到1.16.5版本期间发生了极大的变化。这一章,我们就要了解,到底发生了什么变化?
在1.16.5版本,第五行已经不是Biome了。这一行得和下面一行,即第六行一起看:
Client Light:光照强度(天空光照强度 sky,方块光照强度 block)
Server Light:光照强度(天空光照强度 sky,方块光照强度 block)
不难发现,新版本是将Light一行拆成了客户端光照强度(Client Light)和服务端光照强度(Server Light),实际作用和原本的Light一样,只不过分成了两端。比较奇怪的是,当你并没有在玩服务器而是在单人游戏时,Server Light还是会显示,只不过会显示成:
Server Light:(与上一行的天空光照强度一样 sky,与上一行的方块光照强度一样 block)
嗯,所以说为什么Mojang不直接把它给隐藏掉呢?
第六行下面的第七行CH和第八行SH,是新版本新添加的一对兄弟,也需要一起看:
CH S:xx M:xx
SH S:xx O:xx M:xx ML:xx
这两行的作用差不多,其用处都是显示玩家当前位置(X和Z坐标)最高的特定方块的Y坐标信息,区别就在于一个是客户端的信息(Client Highest)一个是服务端的信息(Server Highest)。
CH和SH都有S和M这两个参数。S的作用是显示玩家当前所处位置(X和Z坐标)最高的非空气方块的方块的Y坐标信息。M是显示玩家当前所处位置(X和Z坐标)最高的任意液体或会挡住你的方块的Y坐标信息。
M这个参数可能会比较难以理解。那就举个例子:
假设一个服务器的腐竹,由于服务器没人玩,很无聊,就用蜘蛛网从地上一直搭(创造模式)搭到Y坐标为212的地方。此时如果有一位玩家路过这个服务器,并且从蜘蛛网下面走了过去,那么在穿过蜘蛛网的时候,它的CH一行会显示为:
CH S:212,M:64
因为蜘蛛网并不会挡住玩家,它本身也不是个液体,导致并不会被M参数算到。但蜘蛛网并不是个空气方块,S参数便记录了它的坐标,所以最终得出了这个结果。
SH在CH的基础上还有O和ML这两个参数(1.18版本还多了个东西在S和O之间,只不过目前在预览版中显示为null:xx),但这两位并不适合单独介绍,而是应该和刚才那两位,搞一个表格(建议电脑或平板上观看):
参数名/方块类型——空气方块—挡人方块—液体—树叶—其他
S——————————×————√———√——√——√
O —————————×————√———×——√——×
M—————————×————√———√——√——×
ML—————————×————√———√——×——×
可能这仍然有些难以理解,但好在,这位腐竹又搞了两个奇怪的塔:
①
蜘蛛网--- 67
水--- 66
树叶--- 65
草方块---64
②
蜘蛛网--- 67
树叶--- 66
水--- 65
草方块--- 64
如果此时有一位管理大大从正上方路过,那么它的调试面板SH这一行将会显示:
①——SH S:67 O:65 M:66 ML:66
(因为蜘蛛网不是空气方块,所以S是67;因为蜘蛛网和水都不会挡住玩家,但树叶可以,所以O是65;因为蜘蛛网和水都不会挡住玩家,但水是液体,所以M和ML都是66)
②——SH S:67 O:66 M:66 ML:65
(因为.....所以S是67;因为树叶会挡住玩家,但蜘蛛网不会,所以O和M都是66;因为蜘蛛网不会挡住玩家,树叶不属于ML的计算范围,水是液体,所以ML是65)
理解了吧?不理解就再看一遍。
第九行和第十行即Biome(生物群系)和Local Difficultly(区域难度)。
第十一行,即SC一行,是在1.16版本中新加入的一行参数,作用是显示生物生成的详细信息:
SC:xx——当前可以生成生物的区块数量,似乎与渲染距离没有关系
M:xx——当前所有已生成的生物中,敌对生物的总数量
C:xx——当前所有已生成的生物中,动物的总数量
A:xx——当前所有已生成的生物中,环境生物(比如蝙蝠)的总数量
W:xx——当前所有已生成的生物中,水生动物的总数量
M:xx——当前所有已生成的生物中,其他类型的生物的总数量
最后一行,也就是Sounds行:
Sounds:xx/xxx + x/x(Mood xx%)
Sounds一行主要是关于游戏声音。Minecraft的游戏声音大致可以分为三类:
普通音效、环境音效、背景音乐
普通音效——游戏中的大部分声音是普通音效,比如放置方块、怪物/动物发出声音、脚步声等都算普通音效
环境音效——环境音效一般是指在特定场景下播放的声音,说白点就是你在挖矿的时候听到的怪声(晚上玩怪恐怖的)。环境音效除了在洞穴里有,还有在水下和在下界的环境音效。
背景音乐——不用多说,C418的音乐真好听。
加号的左边即是普通音效,具体是:
当前正在播放的普通音效数量/可以播放的普通音效数量上限
右边是环境音效,只不过此环境音效还包括了唱片机播放的音乐和游戏背景音乐(或者更准确的来讲应该使用英文Minecraft Wiki的streamed sounds):
当前正在播放的环境音效数量/可以播放的环境音效数量上限
在这一串参数后面,还有一个:
Mood xx%
这个东西目前中文Wiki上没有说明。作者将这东西放进百度生草机里搅拌了一下,得出来了:
情绪 xx%
生草机出来的东西准不准不知道,但这东西绝对跟你的情绪有关。
这东西的百分比后面有一个算法:Mood algorithm
Mood 算法大致的代码(伪)是这样的:
ubr /dateMood(mood):
tickDelay = 6000
maxLightLevel = 15
block = select a random block in a 17×17×17 block cube centered around the br /layer
skyLight = block.getSkyLightLevel()
if (skyLight > 0):
mood = mood -(skyLight / maxLightLevel)* 0.015
else:
blockLight = block.getBlockLightLevel()
mood = mood -(blockLight - 1)/ tickDelay
if (mood ≥ 1.0):
br /layer.br /laySbr /ookySound()
mood = 0.0
else if (mood < 0):
mood = 0.0
翻译:
声明“更新情绪”方法(情绪):
设定变量“游戏刻延迟”值为6000
设定变量“最大光照等级”值为15
在以玩家为中心的17×17×17的立方体中随机选定一个方块
获取该方块的天空光照等级
如果(天空光照等级大于0)
设定变量“情绪”的值=情绪-(天空光照等级÷ 最大光照等级)× 0.015
否则
获取该方块的方块光照等级
设定变量“情绪”的值=情绪-(方块光照等级- 1)÷游戏刻延迟
如果(情绪大于等于1.0)
执行玩家类方法“游戏里诡异的声音”
设定变量“情绪”的值为0.0
否则如果(情绪小于0)
设定变量“情绪”的值为0.0
为了让你能够真正理解这算法是怎么算的,我们来举个栗子。
假设此时你正在矿洞里挖矿。在上一游戏刻中,你的情绪值为0.9999999999999232(Mood 99%),如果此刻游戏随机到了你正前方五格的方块,那么:
游戏通过执行block.getSkyLightLevel这个方法(Java语言中的方法类似于Minecraft中的函数,将一串代码包起来成为一个方法,需要执行的时候再调用),获取到了这个方块的天空光照等级为0。
因为这个方块的天空光照等级是0,所以游戏又执行了block.getBlockLightLevel这个方法,获取到了这个方块的方块光照等级,发现也是0。
于是游戏做了一个简单的运算:
mood = 0.9999999999999232-(0-1)÷6000
=0.9999999999999232-(-1)÷6000
=0.9999999999999232-(-0.0001666666666666)
=0.9999999999999232+0.0001666666666666
=1.0001666666665898
此时游戏发现1.0001666666665898大于1,所以执行了br /layer.br /laySbr /ookySound方法,然后你就听到了一辆地铁驶过的声音(Cave 11)。
但如果这个方块的方块光照等级大于等于1,或者这个方块的天空光照大于0,那么mood值反而会减少一些或不增不减,因为如果仔细观察上面的代码,你会发现计算mood时都是减法,要让mood增加,必须要让减数为负数,各种情况下,只有天空和方块光照等级都为0的情况下才能得出负数。
Mood算法每游戏刻都会执行一遍,每次执行最多增加1/6000。也就是说,在极端的情况下,即你完全置身于黑暗之中,Mood也需要每五分钟才能够轮回一次。
说了这么多,那么这个Mood xx%到底有什么用?
看一下上面的假设就知道了,当Mood到100%也就是你的情绪达到了顶峰时,游戏就会突然给你随机放一个环境音效,把你吓一跳。
嗯.......不愧是Mojang,把玩家的情绪拿捏得明明白白的。
到这儿。左边的第二方阵算是彻底研究完了,但本章还没有结束。
1.8.2版本,左边新出现了个第三方阵,这个第三方阵主要是关于调试本身的信息,它长这个样子:
(1.14版本之前)
Debug:Pie [shift]:hidden FPS [alt]:hidden
For helbr /:br /ress F3 + Q
(1.14版本之后)
Debug:Pie [shift]:hidden FPS + TPS [alt]:hidden
For helbr /:br /ress F3 + Q
第一行Debug主要是一些关于调试界面的参数。Pie指的是饼图,这东西可以通过按shift + F3显示(visible),默认是隐藏(hidden)。
什么?你说按了没用?
哦,这东西得这样按出来:
第一步,按住shift,由于和游戏按键冲突,按住时会蹲下或向下飞行。如果此时调试界面已打开,请先关闭调试界面。
第二步,继续按住shift,同时另一个手指按住F3。
第三步,两个手指同时放开。看,饼图出来了!(这饼图小得字都看不清啊)
FPS(1.14版本之后还有一个TPS,即Ticks Per Second每秒传输刻数)指的是帧(刻)生成时间柱状图,可以按alt + F3显示。在1.14版本之前,这儿只有一个柱状图。这个柱状图有两条参考线,一个参考线在最上面,代表30fbr /s;另一个在中间,代表60fbr /s。这个柱状图的柱子越低,即代表每帧运算的时间越快,FPS越高。
在1.13版本之前,这个柱状图很简陋,但相对于之后的版本,多了一个东西:
xx MB/s
作者猜测这可能跟读写速度有关,可能是内存的读写速度。
1.13版本更新后,这个柱状图就好看多了,首先它变大了,其次它有更丰富的颜色了——柱子越矮越绿,越高越红。
1.14版本更新后,这儿又多了个TPS的生成时间柱状图,看法和FPS的柱子差不多。同时,柱状图上面会显示当前最低和最高计算用时,单位为毫秒。
上面所述的两个附加调试图在关闭调试界面后,如果再打开调试界面,那么将会又一次隐藏。你可能以为我要说如何保持它默认开启,但可惜不是,因为没有这个功能。我要说的是:如何一次性将两个图表都打开。
你只需要按下shift + alt + F3即可。
第二行For helbr /相信大家都看得懂,这就类似于软件中的“获取帮助”,这一行就是提醒你按F3 + Q可以了解更多东西。
具体有什么东西如下:
[?~]F3 + A:重新加载所有区块
[1.8~]F3 + B:打开或关闭实体的碰撞箱(白色线条)、朝向(蓝色线条)和生物的视线高度(红色线条)信息。
[?~1.13~]F3 + C:短按以/execute指令的形式复制玩家本身的坐标、旋转角度信息[1.13及之后]:
/execute in minecraft:overworld run tbr / @s......
长按10秒以使Minecraft游戏本身强制性崩溃
[1.13.1~]Ctrl + F3 + C:按住10秒以使Java本身强制性崩溃(有些键盘需要使用右Ctrl)
[?~]F3 + D:清空聊天记录,但仍然可以通过上下键查看之前输入过的指令和消息
[1.9~]F3 + F:使客户端渲染距离+1(范围为2~32)
[1.9~]F3 + shift + F:使客户端渲染距离-1(范围为2~32)
[1.10~]F3 + G:打开或关闭区块边界(红色,玩家所处区块为黄色)、玩家所处区块区段边界(蓝色)信息
[1.4.2~]F3 + H:打开或关闭高级提示框(即显示物品详细信息,如物品ID、NBT标签)
[1.13~]F3 + I:将玩家所注视的方块或实体在服务端的信息复制下来,具体如下。
方块:/setblock 坐标信息,方块ID[方块状态]
实体:/summon 实体ID,实体坐标,实体NBT
[1.13~]shift + F3 + I:将玩家所注视的方块或实体在客户端的信息复制下来。
[?~1.12.2|1.17~]F3 + L:Wiki上说是“生成、保存性能分析数据”。在1.12.2版本,按住F3 +L会显示“正在加载可见区块”,但实际啥也没有发生。
[1.9~1.16~|需要执行/gamemode权限]F3 + N:在上一个游戏模式和旁观模式切换[1.15之后]在创造模式和旁观模式中切换[1.15及之前]
[1.4.2~]F3 + P:开启或关闭当Minecraft窗口没被选中时自动暂停的功能
[1.9~]F3 + Q:显示帮助列表
[?~1.9]F3 + S:重新加载声音
[?~]F3 + T:重新加载所有资源包(包括原版资源包)和声音
[1.16~|需要执行/gamemode权限]F3 + F4:在四种模式中切换,可以使用鼠标选择或按F4下一个,松开F3即切换到选定模式
[1.14.1~]F3 + Esc:暂停游戏而不显示菜单,多人模式无法暂停
[1.2.4~]shift + F3:显示饼状图
[1.8.2~]alt + F3:显示柱状图
[1.8.2~]shift +alt + F3:我全都要显示
到这里,调试界面左边这一栏才算介绍完成。
本章到此结束。