Я занимаюсь созданием 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();
}
}
Я помещаю все объекты Trees, которые я перетащил на сцену Flash, в массив. Затем в игровом цикле у меня так, чтобы он проверял коллизии с помощью функции checkCollision()
.
У меня это так, что если игрок вообще ударит какое-либо дерево, то он увидит, с какой стороны он ударил его, и не даст игроку двигаться в этом направлении. А если игрок ни во что не врезается, то сбросьте скорость до нормальной, чтобы он мог двигаться в любом направлении.
Но код работает только для первого объекта дерева, который находится в массиве деревьев. Под этим я подразумеваю, что игрок будет остановлен только в том случае, если он движется в 1-е дерево, а не в любое другое дерево в массиве. Как мне сделать так, чтобы он работал для всех деревьев?
Также я думаю, что это может быть связано с тем, где находится моя функция player.resetSpeeds()
, но я не совсем уверен.