我可以拍摄它,它会从舞台上移除但是会被重新渲染,因为它仍然存在于我的阵列中。
感谢
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
答案 0 :(得分: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;
}
}