My for loop won't display my object, but no errors show up

53 Views Asked by At

For some reason my for loop isn't working, the enemies won't spawn and nothing appears in the Output when I used trace. However, there also is no error, so I'm wondering what the issue is.

Here is my code:

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;
        }
    }
}

Thank you for your help!

1

There are 1 best solutions below

1
User 987 On BEST ANSWER

OK, I did not work with AS3 for a long time, but... Why do you expect new enemies to be created if myEnemies length is 0? Also, you created two different ENTER_FRAME functions and there is no need to do that. Create only one function and call it for exmaple update:

private function update(e:event)
{

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

You should not create new sprites using for loop inside ENTER_FRAME function, because this function runs 30 or more times in a second. Create for loop inside "init" or "create" function, unless you want to update code on each frame.

Add 10 enemies:

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);
    }

You cannot use myEnemies to create new Enemy sprite because it's empty, so you create 0 enemies. If you want to create 10 enemies use this code, or simple change number 10 to any number you want.