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.

Другие вопросы по тегам