Мой цикл for не будет отображать мой объект, но ошибки не отображаются - PullRequest
0 голосов
/ 08 июня 2018

По какой-то причине цикл for не работает, враги не появляются, и ничего не появляется на выходе, когда я использовал trace.Однако здесь также нет ошибки, поэтому мне интересно, в чем проблема.

Вот мой код:

var playerX = 0;
var playerY = 0;

var mapWidth = 5000;
var mapHeight = 5000;

//enemy
var myEnemies:Array = new Array();
var enemySprite:Sprite;
var Enemy:enemy;
var enemyCount:int = 0;

//event listeners

stage.addEventListener(Event.ENTER_FRAME, spawnEnemies);

//spawn enemies
function spawnEnemies(spawn:Event) {
    if (enemyCount < 20) {
        for (var i = 0; i < myEnemies.length; i++) {
            enemySprite = new Sprite();
            this.addChild(enemySprite);
            Enemy = new enemy();
            Enemy.x = (Math.random() * this.width);
            Enemy.y = (Math.random() * this.height);
            enemySprite.addChild(Enemy);

            enemyCount++;
            myEnemies[enemyCount] = enemySprite;
            trace(myEnemies.length);
        }
         stage.addEventListener(Event.ENTER_FRAME, moveEnemy);
    }
}

//move the enemies
function moveEnemy(enemyMovement:Event){
    for (var k = 0; k < myEnemies.length; k++) {
        trace("move enemy");
        if (myEnemies[k].y > playerY) {
            myEnemies[k].y -= 1;
            myEnemies[k].rotation = 0;
        }
        else if (myEnemies[k].x < playerX) {
           myEnemies[k].x += 1;
           myEnemies[k].rotation = 90;
        } 
        else if (myEnemies[k].y < playerY) {
           myEnemies[k].y += 1;
           myEnemies[k].rotation = 180;
        }
        else {
           myEnemies[k].x -= 1;
           myEnemies[k].rotation = 270;
        }
    }
}

Спасибо за помощь!

1 Ответ

0 голосов
/ 09 июня 2018

Хорошо, я давно не работал с AS3, но ... Почему вы ожидаете создания новых врагов, если длина myEnemies равна 0?Кроме того, вы создали две разные функции ENTER_FRAME, и в этом нет необходимости.Создайте только одну функцию и вызовите ее для последующего обновления:

private function update(e:event)
{

}
stage.addEventListener(Event.ENTER_FRAME, update);

Не следует создавать новые спрайты, используя цикл for внутри функции ENTER_FRAME, потому что эта функция выполняется 30 или более раз в секунду.Создайте для цикла внутри функции "init" или "create", если вы не хотите обновлять код в каждом кадре.

Добавить 10 врагов:

for (var i = 0; i < 10; i++) {
        Enemy = new enemy();
        Enemy.x = (Math.random() * this.width);
        Enemy.y = (Math.random() * this.height);
        this.addChild(Enemy);
        // add it to array
        myEnemies.push(Enemy);
    }

Вы не можете использовать myEnemies для создания нового врагаспрайт, потому что он пуст, поэтому вы создаете 0 врагов.Если вы хотите создать 10 врагов, используйте этот код или просто измените число 10 на любое другое число.

...