当前位置: 首页 > 知识库问答 >
问题:

我的对象不会在数组中被移除

裘嘉树
2023-03-14

问题是当我击落我的敌人时,他会继续繁殖。可能是我忽略了什么。

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

谢谢

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/Nieuwemap.zip

共有1个答案

西门经国
2023-03-14

在拼接阵列之前,需要移除子阵列。你还需要向后迭代,这样你的索引就不会在循环中间改变。

尝试将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类中,然后直接进入敌方阵法。

我还注意到,你让你的renderemy函数每帧运行一次,这是完全不必要的,会导致不必要的定位。将该函数全部删除,并将代码放入您的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;
        }
    }
 类似资料:
  • 如何在打字稿中从数组中删除对象? 所以我想从所有对象中删除drug_id。我该如何实现呢?谢谢!

  • 我知道有人问过这个问题,但我不能使用它的解决方案来做我想做的事情,我的问题是每次我从函数调用并输入一个Id,它总是告诉我Id被删除,即使我输入了一个从未输入的Id,它仍然打印相同的任何提示和帮助,将不胜感激:)注意:我不想在其中使用ArrayList这里是我的代码:

  • 我在Jolt转换中有一个JSON对象数组的数组,但我需要将对象向上移动到顶层数组。我尝试添加另一个Shift,但这只是将对象移到相同的位置,或者将两个子对象的值放入一个值数组中。

  • 我有一个关于查找数组中对象的计数的问题。我的数组是: 我试图在totalPositions数组中找到每个位置的总计数,因此我的最终数组将如下所示: 我创建了一个函数来求和“总位置”数组中的每个位置,并将总和推入总位置计数。我的函数完成了这项工作,我得到了总计数,但它改变了父数组“完整位置”,第一个“完整位置”的“总位置”被“总位置计数”数组替换。我试图创建一个备份的完整位置,并使用它的计算,仍然两

  • 问题内容: 在Angular中,我在范围内有一个对象,该对象返回许多对象。每个都有一个ID(此ID存储在一个平面文件中,因此没有DB,而且我似乎无法使用) 在我的控制器中: 在我看来,我还有关于默认隐藏的鱼类的更多附加信息,但是当我单击简单的显示更多标签时,我想调用该函数。我的函数看起来像: 现在,在视图中将显示更多详细信息。但是,在搜索了文档之后,我无法弄清楚如何搜索该数组。 那么如何查询数组?