2012-07-26 99 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

相關問題