使用Phaser(以及后续的教程),借助提供的Arcade物理模块,跳转变得非常容易。但是,令人讨厌的事实是,由于使用了“触地得分”逻辑,玩家只能在“处于”地面时跳起来。

我使用的代码基于Game Mechanic Explorer, Platformer #4并遵循;

var canJump = this.player.body.touching.down;

if (canJump && this.upInputIsActive()) {
    this.player.body.velocity.y = this.JUMP_SPEED;
}


我想让一个玩家能够在他们确实靠近地面但还没有触碰时跳起来,以便重新跳跃/着陆时更加流畅。这样,观察到限制是由玩家的touching.down引起的,我的问题是;


是否可以确定玩家到他们正下方的地面(可以是平台)的距离(“多高”)?然后canJump只是距离的函数,仅对于非常小的值才是true。
是否可以在播放器周围(随播放器一起移动)扩展虚拟点击框,使其可以使用自己的touching.down来检测这种情况?这种方法更好吗?播放器精灵本身不应漂浮或脱离地面。


这里的目标是专门让玩家在应该能够跳起之前就跳起来-因此在短时间内记住向上按键是可行的,这并不是我在这种情况下想要的解决方案。

最佳答案

不是“本机”。没有CCD,也没有超前功能,身体只关心它的行进方向。您想要实现的目标通常称为使用传感器。 P2支持传感器,但是Arcade Physics不支持,因此您必须模拟它-通过创建第二个物体(在第2点中已经提到过)或使用标记器。这可能是一个简单的Point对象,当它们跳跃时会被“丢弃”,然后您可以使用该点与身体之间的内置距离检查来满足您的“近距离跳跃”要求。
是的,可以,但是您的Sprite会“飘浮”在空中。所以请看第1点:)

09-26 14:07