0

问题是当我击落我的敌人时,他会不断重生。可能是我忽略的东西。

我可以拍摄它,它会从舞台上移除,但会重新渲染,因为它仍然存在于我的阵列中。

谢谢

private function enemySpawnen():void
    {           
        for(var i:uint = 0; i < hoeveelheidEnemy;i++){
            var enemyShip:SpaceShip = new SpaceShip();
            Enemy[i] = enemyShip;
        }
    }

private function renderEnemy(e:Event):void
    {           
        for(var i:uint = 0; i < hoeveelheidEnemy;i++){              
            if(Enemy[i] != null){
                viewContainer.addChild(Enemy[i]);

                Enemy[i].scaleX = 0.5;
                Enemy[i].scaleY = 0.5;

                Enemy[i].x = 500;
                Enemy[i].y = 400 - i*100;
        }
        }
    }

function shoot(e:Event):void
            {
                kogel.x +=10;

                try{
                    for(var i:uint = 0; i < hoeveelheidEnemy;i++){
                        if(kogel.hitTestObject(Enemy[i])){

                            Enemy.splice(i,0);==>problem when i set it to 1 or i then nothing happens
                            viewContainer.removeChild(Enemy[i]);
                            //trace("hit");
                        }
                    }
                }
                catch(e:Error){

                }
            }

我的源代码可以在这里找到:http: //dl.dropbox.com/u/50815831/Nieuwe%20map.zip

4

1 回答 1

1

在拼接数组之前,您需要移除子元素。您还需要向后迭代,这样您的索引就不会在循环中改变。

尝试将您的 for 循环更改为以下内容:

for(var i:uint = Enemy.length-1; i >= 0;i--){
    if(kogel.hitTestObject(Enemy[i])){
        viewContainer.removeChild(Enemy[i]);
        Enemy.splice(i,1); //do this after the above line, otherwise you're actually removing doing removeChild on the next item in the array
        kogel.removeEventListener(Event.ENTER_FRAME, shoot); //stop the frame handler
        break; //abandon the rest of this loop
    }
}

如果Kogel是一颗子弹并且你希望它只影响一个敌人,那么一旦它破坏了某些东西,你就需要打破循环。

作为良好实践的提示。您应该将拍摄功能/输入帧处理程序封装到您的 Kogel 类中,然后传入敌人数组。

我注意到的其他事情,你让你的renderEnemy函数运行每一帧,这是完全不必要的,并导致不希望的定位。一起删除该函数并将代码放入您的enemySpawned() 方法中:

private function enemySpawnen():void
    {
        for(var i:uint = 0; i < hoeveelheidEnemy;i++){
            var enemyShip:SpaceShip = new SpaceShip();
            Enemy[i] = enemyShip;
            viewContainer.addChild(Enemy[i]);

                Enemy[i].scaleX = 0.5;
                Enemy[i].scaleY = 0.5;

                Enemy[i].x = 500;
                Enemy[i].y = 400 - i*100;
        }
    }
于 2012-11-09T21:16:01.220 回答