arraysactionscript-3for-loopflash-cs3

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


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!


Solution

  • 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.