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