【发布时间】:2016-03-20 22:10:08
【问题描述】:
我正在尝试使用 Phaser 2.4.6 和随附的 p2.js 版本将动态主体从 A 点移动到 B 点。身体准确地停在目标点而不是在该点之后或在它通过之后(非常低的公差是可以接受的),这一点非常重要。到目前为止,我已经尝试了两种方法,但都失败了:
- 使用 Phaser 补间来更改我希望它继续前进的整个路线的身体坐标。这很好用,除了身体可以跳过静态身体。
示例代码:
game.add.tween(sprite.body).to(
{ x: destinationX, y: destinationY },
timeInterval,
Phaser.Easing.Quadratic.InOut,
true
);
- 使用 p2
force属性在所需路径上移动主体。这次与其他物体的碰撞效果很好,但几乎不可能让物体完全停在我想要的坐标处。当身体接近目的地时,我试图减少施加的力,这在 90% 的情况下都很有效。但是,在低性能场景中,动画会“抖动”(这是意料之中的),但也无法击中目标点并越过它,有时甚至会超出很多。我什至会接受在身体到达目的地时强制停止身体并稍微损害场景的真实感的选项,但我无法做到这一点(尝试将力和速度都设置为 0,阻尼设置为 1,等等. - 没有任何效果)。
下面是一些示例代码(在 Phaser 引擎中 sprite.body.data 指向 p2.js 物理体):
// OUTSIDE OF THE GAME LOOP:
var magnitude = game.physics.p2.pxmi(-speed);
var angle = entity.body.data.angle + Math.PI / 2;
var forceX = (magnitude * Math.cos(angle)) / 10;
var forceY = (magnitude * Math.sin(angle)) / 10;
// IN THE GAME LOOP:
sprite.body.data.force[0] = forceX;
sprite.body.data.force[1] = forceY;
// Decrease forceX and forceY as the body approaches the destination
有人可以提供一些建议吗?我在这一点上迷路了,所以我什至可以使用熟悉其他物理引擎的人的有根据的猜测。
谢谢。
【问题讨论】:
-
您可以添加您尝试过的代码,以便我们有一个起点来提供帮助吗?
-
@JamesSkemp 我添加了一些代码。我真的很想使用第二种方法。目前,当精灵接近目的地时,我正在减小 X 轴和 Y 轴上的力,直到最终它们都为零。这可行,但如果 CPU 非常忙,精灵就会开始抖动(这是意料之中的)并最终超出目标点。
标签: javascript phaser-framework