这是一般人都会的我的世界跑酷基础运算(一)
鱼竿吃鱼干
2020年01月24日 13:44

本篇文章借鉴了一些国外wiki的资料,鱼竿主要将其简化翻译,然后做一些扩展。 先谈谈初见这些资料的感受吧

“震撼”

这个词大概可以简单的概述我当时的状态吧 或许是对一堆数学公式的恐惧,让我短时间内说话都不利索了 然后

“舒缓”

坐下来抿一口82年的雪碧 国外理论虽然研究的比较深但并非不可追赶 纵向运动基本持平,水平运动国外领先,特殊操作国内外都各有出众的地方


▌阅读本文需要的基本素养(按重要性排序): 对Minecraft运动的深刻认识,高中及以上的数学物理功底(涉及数列求和,三角函数),能使用一些工具(如excel)来帮助验证公式并进行运算 如果你学过高中物理,这个专栏的进度安排其实和必修一安排很相似,单个方向到多个方向,平面到立体,无视摩擦的光滑面到考虑摩擦等等,一定的物理学习经历可以帮你更好地理解这篇文章

▌本文涉及的主要内容: Minecraft玩家运动的基本运算公式,Minecraft玩家运动的特殊案例及计算方式

那么让我们来一探究竟吧

这是一般人都会的东西                                                                                                              -----------人事   2020年1月3日


注:本专栏涉及所有公式均以1.8为标准,1.9+可能会不一样

参考资料:Minecraft wiki ,mcpk wiki,MC实体运动公式(Bio-Hazard​)(b站专栏可以搜到)

本文以翻译为主,扩展解释为辅,非常感谢mcpk wiki编辑人员的付出

所以看原文什么的最棒了,毕竟信息在传输的过程中会因为各种原因而出现偏差

http://www.mcpk.wiki/ 网页链接​ https://minecraft-zh.gamepedia.com/%E5%AE%9E%E4%BD%93#.E8.BF.90.E5.8A.A8

▶纵向运动 在Minecraft中,垂直速度取决于重力常数-0.08b /t²和空气阻力系数0.98。 如果玩家在跳跃,则将对其垂直速度进行提升。当它们降落在一个块上时,其垂直速度设置为0。

啥?你问我啥是重力常数和空气阻力系数?请看下图

来源:Minecraft wiki-实体-运动

上面这种表格比较精确的给出了各种实体的重力系数(即加速度)和空气阻力系数 在?为什么阻力是0.02而不是上面说的0.98?这里我们需要了解实体运动的一些基本计算方式。

来自:Bio-Hazard的专栏

可见空气阻力系数=1-f,在熟悉了上述定律之后我们自然而然的可以推出下图公式Vn+1

那么我们如何才能获得初速度呢?其实看F3读坐标就行了,但你可能发现数据并不那么规整,这点我会在实际运用中提及。

一次平地跳跃的坐标和速度

PS:在1.8版本Vn+1<0.005时会将Vn+1设置为0,但1.9版本并不适用

使用公式计算

例如上图即将到达最高点时,我们算出Vn+1约为0.03,所以被忽略掉了。这很好地解释了为什么跳跃高度为1.24918……而不会无限叠加

注意点: 1Vn代表玩家当前的速度(以每tick为单位) 2Vn + 1代表在第n个tick结束时的玩家速度,具体取决于第n个节拍中玩家的动作。 3按照惯例,V0设置为0。如果在Tick0上按下了跳跃,则在该tick结束时处理该动作,而V1设置为0.42。 这是一个递归公式,它定义了一个数列(Vn),该数列列出了从n = 0开始的每个刻度上的玩家的垂直速度。 4在顶头时撞到方块时Vn+1被设置为0 5自由落体终端速度为 -3.92 b/t,如果人为的加速(例如利用tnt之类的),那么终端速度可能会突破-3.92但是过段时间就会回到-3.92

预测图

6存在用于确定任何给定n的Vn的通用公式,但是由于浮点算法,因此最好迭代地研究这些公式以紧密模拟游戏的数学运算。这个Bio-Hazard​大佬好像已经在专栏和视频里推出过,可以去看看。 7想要求出每1tick坐标只需对每次的速度进行求和即可,这个可以使用excel的sum函数进行运算,当然也可以像Bio大佬一样推个数学公式

常见的一些模型:1自由落体模型2卡角模型3顶头模型4高度差钻洞模型   上述模型除了顶头模型其他鱼竿均以整理研究并发布专栏,请自行翻阅寻求你想要的的答案。而顶头模型需要配合复杂水平运动使用,这是一个难点,可能会在未来某一天突然发布,敬请期待


▶水平运动

相比纵向运动,水平运动涉及的影响因素可就多得多了:药水效果,方块滑度系数,玩家的操作,涉及角度的混合运算……

乘数(Multiplier)

1运动乘数(Movement Multiplier)

运动乘数Mn

45°Strafe是指从预期方向看成45°时对角移动。 45°潜行是一回事,只是为了偷偷摸摸(由于某些原因,处理方式有所不同) 它与常规运动不同的原因尚不清楚:怀疑它是由于与“垂直运动”的混淆而从未得到纠正。

2效果乘数(Effects Multiplier)

效果乘数En

注意: 如果En <0,则将其设置为0。 速度和慢度的影响并没有像人们预期的那样增加,而是成倍增加。 速度VII或更高,无论速度级别如何,都确保En = 0。类似的,利用这一特点我们可以用超高等级的跳跃提升来防止摔伤,并且不影响跳跃高度。

3滑度乘数(Slipperiness Multiplier)

滑度乘数Sn

Tip:蓝冰:0.989(https://www.mcbbs.net/forum.php?mod=viewthread&tid=911214) S-滑度作为一个新的名词相比大家是比较陌生的,跑酷圈大佬蕴空之灵也曾质疑是否是我个人yy出来的东西,实际上不是的,slipperiness是在源码(或者说反编译的代码中)确切存在的 在Minecraft中滑度对玩家运动的影响是巨大的,因此mcpk.wiki的编辑者们在编辑公式时,必定要讲滑度系数考虑在内。 1:站在不完整方块上,滑度为下面方块的滑度系数,利用这个特点,我们可以让粘液块的加速效果更明显 2:空气滑度指在半空中,但这不意味着空中不会减速,毕竟还有自然阻力的效果 3:为什么这张表中没有灵魂沙的滑度?灵魂沙比较特殊,据我所知它采取了一种奇妙的方式达到减速效果,而非设置滑度,这点会在今后详细讨论

来自mcbbs提问

https://www.mcbbs.net/thread-808036-1-1.html

注意: 1当玩家在地面上时,第一个公式适用。跳跃时,如果玩家正在冲刺,将施加0.2的提升。(https://www.mcbbs.net/thread-808036-1-1.html在这个帖子中,有所提及) 最终,空气方程式在跳出或离开障碍物后立即适用。 2请注意,45°Strafe + Sprint + Jump不会产生线性运动,因此这些公式未将其考虑在内。 3滑块越滑,您节省的惯性就越大,但是牵引力就越不重要。 4对角移动通常更快。特别是,对角线的偷懒比常规的偷偷要快40%。 5药水效果在空中时对水平速度没有影响。


简单的直线运动公式(适用于Linear Jump)

这些简化公式只适用于线性运动。 虽然条件似乎很严格,这些公式是非常有用的分析传统跳和动量(见jump-distance). 稍后我们将扩大对这些公式包括角度。注意,这些公式适合90°的倍数(面临北、东、南或西)

地面公式

地面公式

跳的公式

跳跃公式

空中的公式

空中的公式

完成2D公式

除了前面的乘数,让我们定义两个变量:

Dn:玩家的身体方向(度)  direction

Fn:玩家视角的方向(F3中显示Facing,度)facing

Inertia:惯性部分,Acceleration:加速部分,Sprintjump Boost疾跑起跳部分

地面公式

跳的公式

空中的公式

解释和观察

2 d公式本质上是一个扩展的线性公式。

一些观察:

1:速度的X和Z分量是相互独立的。 2:Sprintjump增加适用于球员的Facing,而不是direction。 这导致45°Sprintjumps比侧面的速度前进速度,因此不是线性的。

停止条件

球员的速度可以设置为0以下几个情况:

墙碰撞

如果玩家点击X-facing墙(即球员正面临西方或东方当撞墙),V(X,n+1)设置为0,这名球员是靠墙放置。

如果玩家点击Z-facing墙(意味着玩家面临北或南当撞墙),V(Z,n+1)设置为0,这名球员是靠墙放置。

Soulsand和蜘蛛网

如果玩家与灵魂沙或一个蜘蛛网发生交互 V(X,n+1)移动后设置为0。 V(Z,n+1)移动后设置为0。

最低速度

当速度接近0时,游戏会直接设置为0(与纵向速度相类似) 这种情况为了阻止玩家停下后继续滑动


这些公式就能完整地预测玩家运动了吗?并不,还远远不够

我们 需要测试大量起跳方式的起跳数据 需要灵魂沙等特殊方块的速度处理方式 需要游戏的浮点数算法 需要实际运用的经验

那么我或者说mcpk.wiki花了这么多精力翻译和解释这些公式有什么用? 了解这些公式可以帮我更好的了解游戏运动,例如解释了跳跃高度是怎么得到的1.249…… 同时,清楚的知道国内理论与国外理论的差距 自我能力的提升,在探索过程中,我学习了一下excel,latex等软件

人类是有极限的, 2018-2019,导致国内顶尖跑酷技术飞升的一大原因是坐标操作的推广与运用,那么下一阶段的提升点在何处呢?我想是甩鼠标,谁甩的越准,谁就越强。那么再下一阶段呢?我想,或许需要一些理论与辅助工具去探索并超越人类极限了。

以后可能更新的项目 粘液块反弹计算,

这是一般人都会的我的世界跑酷基础运算(二),应用篇

顶头跳模型

各类起跳初速数据测算

不过下次更新或许要很久以后吧。

希望感兴趣的小伙伴,能在这期间对本文的公式和理论有所熟悉,有所思考,有所疑虑

END