重力

发表时间: 2025-11-14 14:35:30

最后更新: 2025-11-14 14:35:45(4小时前)

本文标签: 实体机制,移动机制

用户头像-Connie 等1名 热心馆友编辑完成

重力是我的世界的一种游戏内容

介绍

  1. 重力(Gravity)是指物体在垂直方向上不断加速下落的现象。

  2. 在《我的世界》中,生物所受的重力约为地球表面重力的3.26倍,接近木星表面重力的1.29倍。

  3. 这种极高的重力环境通常被认为不适宜生命的生存和繁衍。

机制

  1. 在《我的世界》游戏中,所有实体都有向下运动的倾向,这种现象被称为重力。

  2. 重力的单位是米每二次方游戏刻(m/gt²),在此单位下,所有时间默认使用游戏刻(gt)。

  3. 速度的计算是基于位移而非瞬时速度(Delta Movement),所有公式中时间1gt的表达被省略。

  4. 在Java版本中,生物的重力计算规则如下:当实体的NoGravity属性为true时,其重力值为0。

  5. 对于鱿鱼发光鱿鱼,这两种生物的重力值为固定的0.08。

  6. 除鱿鱼和发光鱿鱼之外的生物,其重力根据重力属性(gravity)计算,默认也是0.08。

  7. 基岩版本中,生物的重力同样设定为0.08,并且对于某些实体,有不同的重力值。

  8. 例如,附魔之瓶的重力为0.07,而羊驼唾沫则为0.06。

  9. 对于光灵箭三叉戟药水等投射物,其重力为0.05;而所有类型的矿车中,其重力为0.005,在其他情况下为0.04。

  10. 只、下落的方块物品实体、被激活的TNT以及潜影弹的重力均为0.04。

  11. 经验球及本文未提及的可投掷物品的弹射物实体则为0.03,其余实体则重力为0。

  12. 虽然不同实体的重力作用产生不同效果,但整体遵循一定规则。

  13. 生物和非生物实体的重力计算方式区分明显,非生物实体通常遵循三种模式。

  14. 例如,在空气中自由落体的情况,重力、位移和阻力的计算顺序为:先计算重力后进行位移,最后施加阻力。

  15. 当实体的重力为g,当前垂直速度为v,阻力为f时,该游戏刻的垂直位移为|v−g|。

  16. 而本游戏刻计算后的当前速度则更新为v←(v−g)(1−f),终端速度则是vt=−gf。

  17. 有些弹射物实体则使用另一种计算模式:先位移、后计算阻力,再减去重力。

  18. 此时的垂直位移同样为|v|,当前速度更新为v←(1−f)v−g,终端速度同样为vt=−gf。

  19. 浮漂等实体则采用最后一种模式,先根据速度位移,随后减去重力,最后计算阻力。

  20. 在处理生物的重力时,计算过程也较为复杂,涉及到缓降飘浮状态效果

  21. 若生物处于缓降状态且下落,且其重力高于0.01,则会被视为0.01。

  22. 随后,根据当前速度进行位移的计算,并添加重力影响。

  23. 当生物具备飘浮状态效果时,其重力不再影响垂直速度,而是与飘浮效果等级有关。

  24. 若生物在未加载或不可见的区块上,且高于最低建筑高度,垂直速度将被设置为-0.1。

  25. 在可见的区块中,垂直速度则直接减去当前的重力。

  26. 生物的阻力固定为0.02,且在进行长跳时不受阻力影响。

  27. 设生物重力为g,当前垂直速度为v,并处于可见区块时:

  28. 自然下落的状态下,该游戏刻的垂直位移为|v|,更新的速度为v←0.98(v−g)。

  29. 其终端速度被设定为vt=−49g。

  30. 在浮漂状态效果影响下的生物,其速度计算则略有不同。

  31. 此时的垂直速度更新为v←0.98(0.8v+0.01l),终端速度为vt=59l/1080。

  32. 受负重力影响的实体无法站立于地面,即使其碰撞箱的底面与固体的顶面完全接触,也无法进行跳跃或行走。

  33. 负重力将导致实体向上落下,但不会造成摔落的效果。

生物垂直运动公式

  1. 根据生物的垂直速度计算原理,可以推导出如下公式。

  2. 请注意,本节所用的符号与上一节有所不同,其中g表示重力加速度,默认值为0.08,f是阻力系数,默认值为0.98(即0.982=0.9604),而v0表示初始速度,若为自由落体则为0。

  3. 在Java版游戏中,除了鱿鱼和发光鱿鱼外,其他生物的重力加速度是由重力属性(gravity)所控制。

  4. 在Java版中,若是骑乘,或者使用胡萝卜钓竿骑乘时,等效阻力f则为0.982,即为0.9604。

  5. 而在基岩版中,阻力系数依然为0.98。

  6. 如果角色拥有缓降状态效果,当vt小于0且重力大于0.01时,重力的等效值将变为0.01。

  7. 涉及缓降和上下移动的计算需进行分段分析。

  8. 当角色获得飘浮状态效果时,等效阻力f将为0.98乘以0.8,等于0.784,等效重力g则为-0.01乘以等级0.08,进一步得出为-0.0125乘以等级。

  9. 此外,所有涉及的时间t单位均以游戏刻为标准,其中1个游戏刻等于0.05秒。

一、 速度

  1. 第t刻的垂直速度vt为:
  2. vt=v0ft−gf1−f(1−ft)=(v0+gf1−f)ft−gf1−f=(v0+3.92)0.98t−3.92(預設情況下)
  3. v0=0(即直接下落)时可化简为:
  4. vt=−gf1−f(1−ft)=−3.92(1−0.98t)(預設情況下)

证明

  1. 根据定义vt=f(vt−1−g),使用数学归纳法得证:
  2. v0=v0f0−gf1−f(1−f0)=1v0−gf1−f(1−1)=v0vt+1=f(vt−g)=f((v0+gf1−f)ft−gf1−f−g)=(v0+gf1−f)ft+1−gf21−f−gf=(v0+gf1−f)ft+1−gf2+gf(1−f)1−f=(v0+gf1−f)ft+1−g(f2+f(1−f))1−f=(v0+gf1−f)ft+1−gf1−f
  1. 求t使得vt≤v′<vt+1或vt≥v′>vt+1(即超过指定速度的前一刻):
  2. t=⌊logfv′+gf1−fv0+gf1−f⌋=⌊log0.98v′+3.92v0+3.92⌋(預設情況下)
  3. v0=0(即直接下落)时可化简为:
  4. t=⌊logf((1−f)v′gf+1)⌋
  5. v′=0(即方向改变)时可化简为:
  6. t=⌊−logf((1−f)v0gf+1)⌋
  7. t可能不存在。
  8. 若欲使vt−1<v′≤vt或vt−1>v′≥vt,则应将向下取整改为向上取整。

证明

  1. 尽管速度公式只在输入为自然数时才具意义,但直接将其扩张到实数后可以发现该函数单调且连续。
  2. 因此,我们可以计算其反函数并取整来得到最接近目标速度的两个刻数。
  3. 令速度公式输入实数t′后的输出为v′。
  4. v′=(v0+gf1−f)ft′−gf1−f(v0+gf1−f)ft′=gf1−f+v′ft′=v′+gf1−fv0+gf1−ft′=logfv′+gf1−fv0+gf1−f
  5. 当v0=0时:
  6. t′=logfv0+gf1−fgf1−f=logf((1−f)v0gf+1)
  7. 当v′=0时:
  8. t′=logfgf1−fv0+gf1−f=−logfv0+gf1−fgf1−f=−logf((1−f)v0gf+1)

二、 位移

  1. 经过t刻的累计位移st为:
  2. st=(v0+gf1−f)(1−ft)−tgf1−f=50((v0+3.92)(1−0.98t)−0.0784t)(預設情況下)
  3. v0=0(即直接下落)时累计位移可化简为:
  4. st=gf1−f(1−ft1−f−t)=50(3.92(1−0.98t)−0.0784t)(預設情況下)

证明

  1. s0=0st=st−1+vt−1=∑k=0t−1vk=∑k=0t−1(v0+gf1−f)fk−gf1−f=−tgf1−f+(v0+gf1−f)∑k=0t−1fk=−tgf1−f+(v0+gf1−f)1−ft1−f=(v0+gf1−f)(1−ft)−tgf1−f
  2. v0=0时:
  3. st=gf1−f(1−ft)−tgf1−f=gf1−f(1−ft)1−f−tgf1−f=gf1−f(1−ft1−f−t)
  1. 求t使得st≤s′<st+1或st≥s′>st+1(即经过指定位移的前一刻):
  2. t=⌊b−1ln⁡fW(afbln⁡f)⌋其中a=v0gf+11−f,b=a−(1−f)s′gf
  3. 默认情况下:
  4. t≈⌊49.4983W(−0.093842(v0+3.92)0.99485950v0−s′)+0.255102(50v0−s′)+50⌋
  5. 当v0=0(直接下落)时:
  6. t≈⌊49.4983W(−0.367861×0.994859−s′)+0.255102s′+50⌋
  7. 其中W为朗伯W函数,使用W−1与W0分支分别可以获取第一次(和重力方向相反)和第二次(和重力方向相同)经过指定位移的时间。t可能不存在。
  8. 若欲使st−1<s′≤st或st−1>s′≥st,则应将向下取整改为向上取整。

证明

  1. 类似于速度,我们也可以计算将位移公式扩张至实数后计算其反函数并取整。
  2. 但由于速度方向改变时位移会有一个转折,该反函数将会是多值的。
  3. 由于t同时为于指数上与下,故须使用朗伯W函数来表示,该函数的定义为W(xex)=x。
  4. 令位移公式输入实数t′后的输出为s′。
  5. s′=(v0+gf1−f)(1−ft′)−t′gf1−f
  6. 设a=v0gf+11−f,则原方程序可以表示为:
  7. s′=agf(1−ft′)−tgf1−f=gf1−f(a−aft′−t′)(1−f)s′gf=a−aft′−t′
  8. 再设b=a−(1−f)s′gf,则有:
  9. aft′+t′=baet′ln⁡f=b−ta=(b−t′)e−t′ln⁡faebln⁡f=(b−t′)e(b−t′)ln⁡faebln⁡fln⁡f=(b−t′)ln⁡fe(b−t′)ln⁡fW(aebln⁡fln⁡f)=(b−t′)ln⁡f1ln⁡fW(afbln⁡f)=b−t′t′=b−1ln⁡fW(afbln⁡f)

实体自由下落速度

  1. 下表中列出了各个实体在空气中自由下落时的重力、阻力及对应的终端速度。
实体 重力(m/gt2) 阻力(1) 终端速度(m/gt) [隐藏]终端速度(m/s)
生物 我的世界百科重力实体自由下落速度配图缓降影响、正在下落、且修正前重力高于0.01的生物 0.01 0.02 0.49 9.8
我的世界百科重力实体自由下落速度配图鱿鱼
我的世界百科重力实体自由下落速度配图发光鱿鱼
0.08 0.02 3.92 78.4
其他 重力属性计算值g 0.02 49g 980g
弹射物 我的世界百科重力实体自由下落速度配图
我的世界百科重力实体自由下落速度配图三叉戟
0.05 0.01 5 100
我的世界百科重力实体自由下落速度配图雪球
我的世界百科重力实体自由下落速度配图鸡蛋
我的世界百科重力实体自由下落速度配图末影珍珠
0.03 0.01 3 60
我的世界百科重力实体自由下落速度配图喷溅药水
我的世界百科重力实体自由下落速度配图滞留药水
0.05 0.01 5 100
我的世界百科重力实体自由下落速度配图附魔之瓶 0.07 0.01 7 140
我的世界百科重力实体自由下落速度配图羊驼唾沫 0.06 0.01 6 120
我的世界百科重力实体自由下落速度配图潜影弹(无攻击对象) 0.04 0
我的世界百科重力实体自由下落速度配图浮漂 0.03 0.08 0.345 6.9
我的世界百科重力实体自由下落速度配图矿车 0.04 0.05 0.8 16
我的世界百科重力实体自由下落速度配图下落的方块
我的世界百科重力实体自由下落速度配图物品
我的世界百科重力实体自由下落速度配图被激活的TNT
0.04 0.02 2 40
我的世界百科重力实体自由下落速度配图经验球 0.03 0.02 1.5 30
📑
🤔
⬆️