2012-07-26 54 views
0

我在一段时间得到这个错误一次特定对象的孩子。出于某种原因,当我产生这个对象而不是一个对象时,这个问题似乎就开始了。我基本上有敌人投掷硬币和一个敌人滴2。当我同时接他们,我开始得到这个错误。提供的DisplayObject必须是调用

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

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

如果spawnedCoins仅仅是一个数组,那么拼接应采取2个整数ARGS startIndex和deleteCount relevant adobe help page

通过传递的对象是什么,我认为正在发生的事情是,它是铸造对象为int,“1”的值(即非空)。

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

+0

这似乎是问题所在。它已被改为另一种方法,但这将有助于确定。谢谢。 – oliboon 2012-07-30 19:14:03

1

该错误意味着这个项目你想从显示列表中删除(通过调用removeChild之)要么不显示列表上,或者是不是你调用removeChild之物体的孩子。

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

改变你现有的代码块:

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

这样:

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

此检查“这”有父,如果是的话,它会删除自己从它的父。

+0

稍尖,所以没有点检查,这不能为空。 – BadFeelingAboutThis 2012-07-26 21:44:49

+0

我试过你的方法,我根本没有收到错误。然而,只有一枚硬币被捡起,另一枚硬币会一直呆在那里,直到它超过底限时才会产卵。我根本没有收到任何错误。 – oliboon 2012-07-26 22:40:20

+0

尝试在您的交换机中放置一条跟踪语句。所以在'案例1'之后:'把'痕迹(这个)';''这将确认您的功能是否为每枚硬币而召唤。既然你不显示removeCoin的调用方式,很难知道你的实际问题是什么 - 我的猜测是你的removeCoin函数没有正确调用。 – BadFeelingAboutThis 2012-07-26 23:06:46

相关问题