0

对于特定对象,我偶尔会收到此错误。出于某种原因,当我生成 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);
     }

编辑了代码。

4

2 回答 2

1

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

在不分析所有代码的情况下,快速检查可能会解决您的问题。

更改您现有的代码块:

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

对此:

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

这会检查 'this' 是否有父级,如果有,它将自己从父级中移除。

于 2012-07-26T21:43:54.137 回答
0

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

如果 spawnedCoins 只是一个数组,则 splice 应采用 2 个整数参数 startIndex 和 deleteCount相关 adobe 帮助页面

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

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

于 2012-07-30T14:34:47.377 回答