首先,在其中一个 if 块中,您将递增position.x
10,而在另一个块中,您将递减velocity.x
10。我猜您的意思position.x
是两者。
其次,想象movingPlatform.position.x
是 150,你enterFrameHandler
跑了一次。movingPlatform.position.x
将变为 160,并且在下一次enterFrameHandler
调用时,不会执行任何 if 块,因为 160 既不小于或等于 150,也不大于或等于 260。
您可以使用速度来指示其移动的一侧,并在超出边缘后将其反转,例如:
// assuming velocity is (1,0)
private function enterFrameHandler(ev:Event):void {
if (movingPlatform.position.x <= 150 || movingPlatform.position.x >= 260) {
movingPlatform.velocity.x = -movingPlatform.velocity.x;
}
movingPlatform.position.x += movingPlatform.velocity.x;
}
显然,如果对象已经在假设 x=100,这可能会导致问题,它只会继续反转它的速度,所以要么确保将它放在 150-260 之间,要么添加额外的检查以防止它多次反转它的方向.
这可能是一种更好的方法:
// assuming velocity is (1,0)
private function enterFrameHandler(ev:Event):void {
if (movingPlatform.position.x <= 150) {
movingPlatform.velocity.x = 1;
} else if (movingPlatform.position.x >= 260) {
movingPlatform.velocity.x = -1;
}
movingPlatform.position.x += movingPlatform.velocity.x;
}