我正在制作 Flash 游戏,目前我正在为碰撞检测进行编码。碰撞检测将用于检测玩家是否遇到障碍物,如果玩家遇到障碍物,则阻止他跑过。
这是我用于碰撞检测的代码:
一个 createLevel 函数
private function createLevel():void
{
for (var i:int; i < numChildren; i++)
{
if (getChildAt(i) is Trees)
{
var j = getChildAt(i);
treesArray.push(j);
trace(treesArray.length);
}
}
}
并具有碰撞检测功能。
private function checkCollisions():void
{
for each (var trees:Trees in treesArray)
{
if (player.hitTestObject(trees))
{
switch (true)
{
case (player.x <= trees.x) :
player.setRightSpeed(0);
break;
case (player.x >= trees.x) :
player.setLeftSpeed(0);
break;
}
switch (true)
{
case (player.y <= trees.y) :
player.setDownSpeed(0);
break;
case (player.y >= trees.y) :
player.setUpSpeed(0);
break;
}
}
else
{
player.resetSpeeds();
}
}
我将所有拖到 Flash 舞台上的 Trees 对象放入一个数组中。然后在游戏循环中,我拥有它,以便它检查与checkCollision()
函数的冲突。
我有它,这样如果玩家撞到任何一棵树,它就会看到他撞到了哪一边,并阻止玩家朝那个方向移动。如果玩家没有击中任何东西,则将速度重置为正常,以便他可以向任何方向移动。
但该代码仅适用于treesArray 中的第一个Tree 对象。我的意思是玩家只有在移动到第一棵树而不是阵列中的任何其他树时才会停止。我如何使它适用于所有树木?
另外我认为这可能是由于我的player.resetSpeeds()
功能所在的位置,但我不确定。