我正在尝试在AS3中构建一个平台游戏,方法是将我的Platform类的所有实例放入一个Array中,然后使用hitTestObject为每个循环运行一个来检查玩家是否正在触摸其中任何一个。
我的问题是,虽然玩家会正确地做出反应来触摸阵列中的每个平台(即停止下降并将y位置设置到平台顶部),但我只能在站在最后一个位置时执行跳跃功能阵列中的平台。
我对ActionScript相当新,所以我不知道为什么会这样 - 肯定'for each'循环意味着每个平台应该以相同的方式行事?一些代码肯定适用于每个平台,但由于某种原因不是允许玩家跳跃的。
如果有人知道为什么会这样,并且可以提供解决方案,我将非常感激。这已经让我上了几天了。
这是相关代码。在输入框架侦听器上调用该函数。
private function collisionTestPlatforms (event:Event) : void {
for each (var i:Platform in aPlatforms) {
if (player.hitTestObject(i)) {
Player.touchingGround = true;
player.y = i.y - 25;
Player.yVelocity = 0;
} else {
Player.touchingGround = false;
}
}
}
非常感谢!
答案 0 :(得分:1)
类似于@ DodgerThud的建议,您可以将条件else
带出循环:
private function collisionTestPlatforms (event:Event) : void {
//By default, the player is not touching the ground until we find
// a collision with one of the platforms
Player.touchingGround = false;
for each (var i:Platform in aPlatforms) {
if (player.hitTestObject(i)) {
Player.touchingGround = true;
player.y = i.y - 25;
Player.yVelocity = 0;
}
}
}