AS3: отдельные экземпляры в массиве?
Я делаю игру с боковой прокруткой в as3, где игрок порождает юниты, которые автоматически идут к выходу на другой стороне экрана, но есть башни, которые их останавливают. Я бы хотел, чтобы башни снимали отдельно, есть ли способ? Вот мой код, когда операторы if удовлетворяются, все башни одновременно срабатывают.
private function tower1Fire():void
{
for (var j:int = creep1Array.length - 1; j >= 0; j--)
{
for each (var towerOne:mcTower1 in tower1Array)
{
if (creep1Array[j].x - towerOne.x <= 100 && creep1Array[j].y > towerOne.y)
{
var newTower1Bullet:mcLaser1 = new mcLaser1;
newTower1Bullet.x = towerOne.x;
newTower1Bullet.y = towerOne.y;
tower1BulletArray.push(newTower1Bullet);
stage.addChild(newTower1Bullet);
}
}
}
}
У меня есть 3 башни на экране, добавленные с помощью этого кода:
var tower1New1:MovieClip = new mcTower1;
tower1New1.x = 313;
tower1New1.y = 340;
tower1Array.push(tower1New1);
MovieClip(root).addChild(tower1New1);
Я не получаю никакой ошибки. Любой ответ будет оценен, спасибо!
1 ответ
Из того, что я могу сказать, все ваши башни будут "стрелять" в одном "кадре рендера", поэтому похоже, что все они стреляют одновременно. (потому что весь ваш цикл будет выполняться в течение одной операции рисования)
Если бы я был тобой, я бы послушал событие ENTER_FRAME и вел счетчик кадров... Я бы запустил только одну башню, раз за 10-20 кадров. Так...
private ENTER_FRAME(event:Event):void
{
if(frameCount >= 20)
{
// TODO: fire logic goes here
// reset the frameCount to zero
frameCount = 0;
// you need to keep a running index of your towers,
// so the next time your code executes, it will fire the next tower
towerIndex++
}
frameCount++;
}
Так что, если мы будем делать это таким образом, у вас не будет цикла for.