重力
发表时间: 2025-11-14 14:35:30
最后更新: 2025-11-14 14:35:45(4小时前)
本文标签: 实体机制,移动机制
介绍
-
重力(Gravity)是指物体在垂直方向上不断加速下落的现象。
-
在《我的世界》中,生物所受的重力约为地球表面重力的3.26倍,接近木星表面重力的1.29倍。
-
这种极高的重力环境通常被认为不适宜生命的生存和繁衍。
机制
-
在《我的世界》游戏中,所有实体都有向下运动的倾向,这种现象被称为重力。
-
重力的单位是米每二次方游戏刻(m/gt²),在此单位下,所有时间默认使用游戏刻(gt)。
-
速度的计算是基于位移而非瞬时速度(Delta Movement),所有公式中时间1gt的表达被省略。
-
在Java版本中,生物的重力计算规则如下:当实体的NoGravity属性为true时,其重力值为0。
-
除鱿鱼和发光鱿鱼之外的生物,其重力根据重力属性(gravity)计算,默认也是0.08。
-
在基岩版本中,生物的重力同样设定为0.08,并且对于某些实体,有不同的重力值。
-
对于箭、光灵箭、三叉戟和药水等投射物,其重力为0.05;而所有类型的矿车在水中,其重力为0.005,在其他情况下为0.04。
-
经验球及本文未提及的可投掷物品的弹射物实体则为0.03,其余实体则重力为0。
-
虽然不同实体的重力作用产生不同效果,但整体遵循一定规则。
-
例如,在空气中自由落体的情况,重力、位移和阻力的计算顺序为:先计算重力后进行位移,最后施加阻力。
-
当实体的重力为g,当前垂直速度为v,阻力为f时,该游戏刻的垂直位移为|v−g|。
-
而本游戏刻计算后的当前速度则更新为v←(v−g)(1−f),终端速度则是vt=−gf。
-
有些弹射物实体则使用另一种计算模式:先位移、后计算阻力,再减去重力。
-
此时的垂直位移同样为|v|,当前速度更新为v←(1−f)v−g,终端速度同样为vt=−gf。
-
浮漂等实体则采用最后一种模式,先根据速度位移,随后减去重力,最后计算阻力。
-
若生物处于缓降状态且下落,且其重力高于0.01,则会被视为0.01。
-
随后,根据当前速度进行位移的计算,并添加重力影响。
-
当生物具备飘浮状态效果时,其重力不再影响垂直速度,而是与飘浮效果等级有关。
-
若生物在未加载或不可见的区块上,且高于最低建筑高度,垂直速度将被设置为-0.1。
-
在可见的区块中,垂直速度则直接减去当前的重力。
-
生物的阻力固定为0.02,且在进行长跳时不受阻力影响。
-
设生物重力为g,当前垂直速度为v,并处于可见区块时:
-
自然下落的状态下,该游戏刻的垂直位移为|v|,更新的速度为v←0.98(v−g)。
-
其终端速度被设定为vt=−49g。
-
在浮漂状态效果影响下的生物,其速度计算则略有不同。
-
此时的垂直速度更新为v←0.98(0.8v+0.01l),终端速度为vt=59l/1080。
-
受负重力影响的实体无法站立于地面,即使其碰撞箱的底面与固体的顶面完全接触,也无法进行跳跃或行走。
-
负重力将导致实体向上落下,但不会造成摔落的效果。
生物垂直运动公式
-
根据生物的垂直速度计算原理,可以推导出如下公式。
-
请注意,本节所用的符号与上一节有所不同,其中g表示重力加速度,默认值为0.08,f是阻力系数,默认值为0.98(即0.982=0.9604),而v0表示初始速度,若为自由落体则为0。
-
而在基岩版中,阻力系数依然为0.98。
-
如果角色拥有缓降状态效果,当vt小于0且重力大于0.01时,重力的等效值将变为0.01。
-
涉及缓降和上下移动的计算需进行分段分析。
-
当角色获得飘浮状态效果时,等效阻力f将为0.98乘以0.8,等于0.784,等效重力g则为-0.01乘以等级0.08,进一步得出为-0.0125乘以等级。
-
此外,所有涉及的时间t单位均以游戏刻为标准,其中1个游戏刻等于0.05秒。
一、 速度
- 第t刻的垂直速度vt为:
- vt=v0ft−gf1−f(1−ft)=(v0+gf1−f)ft−gf1−f=(v0+3.92)0.98t−3.92(預設情況下)
- v0=0(即直接下落)时可化简为:
- vt=−gf1−f(1−ft)=−3.92(1−0.98t)(預設情況下)
证明
- 根据定义vt=f(vt−1−g),使用数学归纳法得证:
- 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
- 求t使得vt≤v′<vt+1或vt≥v′>vt+1(即超过指定速度的前一刻):
- t=⌊logfv′+gf1−fv0+gf1−f⌋=⌊log0.98v′+3.92v0+3.92⌋(預設情況下)
- v0=0(即直接下落)时可化简为:
- t=⌊logf((1−f)v′gf+1)⌋
- v′=0(即方向改变)时可化简为:
- t=⌊−logf((1−f)v0gf+1)⌋
- t可能不存在。
- 若欲使vt−1<v′≤vt或vt−1>v′≥vt,则应将向下取整改为向上取整。
证明
- 尽管速度公式只在输入为自然数时才具意义,但直接将其扩张到实数后可以发现该函数单调且连续。
- 因此,我们可以计算其反函数并取整来得到最接近目标速度的两个刻数。
- 令速度公式输入实数t′后的输出为v′。
- 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
- 当v0=0时:
- t′=logfv0+gf1−fgf1−f=logf((1−f)v0gf+1)
- 当v′=0时:
- t′=logfgf1−fv0+gf1−f=−logfv0+gf1−fgf1−f=−logf((1−f)v0gf+1)
二、 位移
- 经过t刻的累计位移st为:
- st=(v0+gf1−f)(1−ft)−tgf1−f=50((v0+3.92)(1−0.98t)−0.0784t)(預設情況下)
- v0=0(即直接下落)时累计位移可化简为:
- st=gf1−f(1−ft1−f−t)=50(3.92(1−0.98t)−0.0784t)(預設情況下)
证明
- 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
- v0=0时:
- st=gf1−f(1−ft)−tgf1−f=gf1−f(1−ft)1−f−tgf1−f=gf1−f(1−ft1−f−t)
- 求t使得st≤s′<st+1或st≥s′>st+1(即经过指定位移的前一刻):
- t=⌊b−1lnfW(afblnf)⌋其中a=v0gf+11−f,b=a−(1−f)s′gf
- 默认情况下:
- t≈⌊49.4983W(−0.093842(v0+3.92)0.99485950v0−s′)+0.255102(50v0−s′)+50⌋
- 当v0=0(直接下落)时:
- t≈⌊49.4983W(−0.367861×0.994859−s′)+0.255102s′+50⌋
- 其中W为朗伯W函数,使用W−1与W0分支分别可以获取第一次(和重力方向相反)和第二次(和重力方向相同)经过指定位移的时间。t可能不存在。
- 若欲使st−1<s′≤st或st−1>s′≥st,则应将向下取整改为向上取整。
证明
- 类似于速度,我们也可以计算将位移公式扩张至实数后计算其反函数并取整。
- 但由于速度方向改变时位移会有一个转折,该反函数将会是多值的。
- 由于t同时为于指数上与下,故须使用朗伯W函数来表示,该函数的定义为W(xex)=x。
- 令位移公式输入实数t′后的输出为s′。
- s′=(v0+gf1−f)(1−ft′)−t′gf1−f
- 设a=v0gf+11−f,则原方程序可以表示为:
- s′=agf(1−ft′)−tgf1−f=gf1−f(a−aft′−t′)(1−f)s′gf=a−aft′−t′
- 再设b=a−(1−f)s′gf,则有:
- aft′+t′=baet′lnf=b−ta=(b−t′)e−t′lnfaeblnf=(b−t′)e(b−t′)lnfaeblnflnf=(b−t′)lnfe(b−t′)lnfW(aeblnflnf)=(b−t′)lnf1lnfW(afblnf)=b−t′t′=b−1lnfW(afblnf)
实体自由下落速度
- 下表中列出了各个实体在空气中自由下落时的重力、阻力及对应的终端速度。
| 实体 | 重力(m/gt2) | 阻力(1) | 终端速度(m/gt) | [隐藏]终端速度(m/s) | |
|---|---|---|---|---|---|
| 生物 | 受 |
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 | ||
| 0.04 | 0.02 | 2 | 40 | ||
| 0.03 | 0.02 | 1.5 | 30 | ||
语言
字体
平视显示器
第三人称视角
聊天
弹窗
教学提示
提示框
动作栏
定位栏
Boss栏
灵动视效
记分板
截图
进度
统计信息
队伍
成就
判定箱
东南规则
爆炸
多人游戏
药水效果
游戏事件
世界
难度
极限模式
游戏规则
维度
种子(世界生成)
灾厄巡逻队
袭击
僵尸围城
方块基本属性
挖掘
Java版材料
基岩版材料
含水
方块更新
红石电路
氧化
作物机制
含雪
稀有度
工具材料
盔甲材料
物品耐久
魔咒
光效
槽位
物品冷却
掉落物
箱子战利品(结构索引)
钓鱼
药水酿造
附魔(物品修饰)
铁砧机制
物品修复
锻造
伤害
伤害类型
着火
摔落
骑乘
朝向
重力
跳跃
走上方块
属性
生物AI
寻路
评论( {{ count }})条
{{ item.user_detail["nick_name"] }}
{{ item.user_detail["title"] }}
暂无内容