1

使用 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玩家造成的,我的问题是;

  1. 是否可以确定玩家与他们正下方的地面(可以是平台)的距离(“多高”)?然后canJump只是距离的函数,仅适用于非常小的值。

  2. 可以在玩家周围扩展虚拟命中框(将与玩家一起旅行),以便touching.down可以使用它自己的来检测这种情况吗?这种方法更好吗?玩家精灵本身不应悬浮在地面上或受到其他影响。

这里的目标是让玩家在他们应该能够跳跃之前跳跃- 所以在短时间内记住向上按键,这可能是可行的,这不是我在这种特殊情况下寻求的解决方案.

4

1 回答 1

3
  1. 不是“本机”。没有 CCD 或前瞻,身体只关心它行进的方向。您要实现的目标通常称为使用传感器。P2 支持传感器,但 Arcade Physics 不支持,因此您必须模拟它 - 通过创建第二个主体(您在第 2 点中提到过)或使用标记。这可能是一个简单的 Point 对象,当它们跳跃时会“掉落”,然后您可以使用该点和身体之间的内置距离检查来满足您的“近跳”要求。

  2. 是的,它可以,但是你的 Sprite 会“漂浮”在空中。所以见第1点:)

于 2014-09-03T20:31:02.547 回答