我偶尔会为特定对象收到此错误。出于某种原因,这个问题似乎从我产生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);
}
编辑了代码。
答案 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);