垂直运动公式
跳跃公式
玩家在跳跃过程中的垂直速度非常容易计算:
如果,则会被设为 0(该刻玩家的高度不会改变)。
在 1.9+,这个阈值变为 0.003。
注意
- 并没有被赋值,因为它并不重要。按照惯例,第 0 刻对应玩家跳跃前的初始速度。
- 对应初始跳跃速度。每拥有一级跳跃提升就增加 0.1。
- 由于动量阈值降低,1.9 版本的跳跃高度略高(旧=1.249,新=1.252)。
- 极限速度为 -3.92 m/t。
- 当玩家与方块垂直碰撞时,垂直动量被取消,仅保留加速度。
跳跃持续时间
- 跳跃的持续时间是起跳与落地之间刻的数量。
- 重复跳跃时,这也代表此类跳跃的循环周期。
- 这个概念与 Tiers(阶)的概念有关。
介绍 持续时间 平地跳跃 12 t 3bc 跳跃 11 t +0.5 跳跃 10 t +1 跳跃 9 t 2.5bc 跳跃 6 t 2bc 跳跃 3 t 1.8125bc 跳跃 2 t
源代码
/* 与垂直运动不相关的代码已被删去 */ protected float getJumpUpwardsMotion(){ return 0.42F; } protected void jump() { this.motionY = this.getJumpUpwardsMotion(); if (this.isPotionActive(Potion.jump)) { this.motionY += (this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F; } this.isAirBorne = true; } public void moveEntityWithHeading(float strafe, float forward) { ... /* 同时水平移动玩家 */ this.motionY -= 0.08; this.motionY *= 0.98; } public void onLivingUpdate() { if (this.jumpTicks > 0) --this.jumpTicks; if (Math.abs(this.motionY) < 0.005D) this.motionY = 0.0D; if (this.isJumping) { ... /* 在水中或熔岩中时有所不同 */ if (this.onGround && this.jumpTicks == 0) { this.jump(); this.jumpTicks = 10; //激活自动跳跃冷却(0.5秒) } } else { this.jumpTicks = 0; //重置自动跳跃冷却 } ... this.moveEntityWithHeading(this.moveStrafing, this.moveForward); }