提供的DisplayObject必须是调用者的子级

时间:2012-07-26 21:28:57

标签: actionscript-3 actionscript displayobject

我偶尔会为特定对象收到此错误。出于某种原因,这个问题似乎从我产生2个这个对象而不是一个对象开始。我基本上有敌人掉落硬币,一个敌人掉落2.当我同时拿起它们时,我开始收到这个错误。

public function removeCoin(){
        removeEventListener(Event.ENTER_FRAME, moveCoin);
        if(this.parent){
            this.parent.removeChild(this);
        }
        parentMC.level.spawnedCoins.splice(this, 1);
}

当玩家和硬币发生碰撞时,这是碰撞检查所调用的功能。这个问题通常从我从这个功能中一次拿起两个硬币开始。

var dropCoin:Number = Math.random() * 100;
    if(dropCoin > 40){
        var newCoin1:coin = new coin(parentMC);
        var newCoin2:coin = new coin(parentMC);
        newCoin1.x = x+7;
        newCoin1.y = y;
        parentMC.level.levelObjects.addChild(newCoin1);
        parentMC.level.spawnedCoins.push(newCoin1);
        newCoin2.x = x-7;
        newCoin2.y = y;
        parentMC.level.levelObjects.addChild(newCoin2);
        parentMC.level.spawnedCoins.push(newCoin2);
     }

编辑了代码。

2 个答案:

答案 0 :(得分:1)

该错误意味着您尝试从显示列表中删除的项目(通过调用removechild)不在显示列表中,或者不是您调用removeChild的对象的子项。

如果不分析所有代码,快速检查可以解决您的问题。

更改现有的代码块:

if(this != null){
   parentMC.lvl1.levelObjects.removeChild(this);
}

到此:

if(this.parent){
 this.parent.removeChild(this);
}

检查'this'是否有父项,如果有,则将其自身从父项中删除。

答案 1 :(得分:0)

我认为你的问题可能是:
parentMC.level.spawnedCoins.splice(this,1);

如果spawnedCoins只是一个数组,则splice应该采用2个整数args startIndex和deleteCount relevant adobe help page

通过传递一个对象我认为正在发生的是它将对象转换为int,值为'1'(即不为null)。

我认为你想要的是parentMC.level.spawnedCoins.splice(parentMC.level.spawnedCoin.indexOf(this),1);