2014-04-06 121 views
0

我一直試圖在actionscript 3中創建遊戲,但在過去的4個小時中遇到了一個問題。 每當你按下一個鍵時,一個塊就會出現,顏色取決於你按下哪個鍵,當敵人擊中該塊時,它們消失。我這樣做是爲了讓敵人通過removeChild被移除,並且在1秒之後本身消失,但問題在於,在塊被移除後,敵人仍然會死亡,儘管塊不再是可見的,所以我就是這樣。儘管HitTest對象被刪除,但對象仍然消失

我使用Vechtblok.as這個代碼(這是出現殺死敵人的塊),我通過添加事件監聽到計時器命名sterf添加此代碼,這是功能:

public function gaWeg(e:TimerEvent):void 
    { 
     blok.parent.removeChild(blok); 
    } 

在Vijand.as(敵人類)我有這樣的代碼爲他們dissapear,我給敵人這段代碼通過添加事件監聽:

public function aanval(e:Event):void 
    { 
     if(hitTestObject(Vechtblok.blok)) 
     { 
      teken.removeEventListener(Event.ENTER_FRAME, beweegHor); 
      trace(String(watbenik)); 
      teken.parent.removeChild(teken); 

      //removeChild(Vechtblok.blok); 
     } 

    } 

我認爲錯誤應該是在某個地方,但我的頭太疼很多時候我花在試圖修復它上。

在此先感謝,併爲我的英文破碎感到遺憾。 乾杯。

回答

0

根據您的代碼和我可以理解的內容,您不會更新代碼,以致Vechtblok.blok在刪除自身後不再引用同一個塊。 hitTestPointhitTestObject使用對象的邊界來檢查碰撞,無論他們是否在舞臺上。

從靜態變量Vechtblok.blok判斷,一次只支持一個塊。一旦塊被移除,該變量仍然指向它。它只是不再顯示在舞臺上。您的衝突代碼仍在檢查同一個塊。

你將不得不修改您的代碼是這樣的:

public function gaWeg(e:TimerEvent):void 
    { 
     blok.parent.removeChild(blok); 
     blok = null; 
    } 

;

public function aanval(e:Event):void 
    { 
     if(Vechtblock.blok != null && hitTestObject(Vechtblok.blok)) 

這樣碰撞檢查只發生在實際存在塊的情況下。

+0

嘿TreeTree,這個工作,但是當我通過命令創建另一個塊時,它給了我一個錯誤,它不能指向一個空對象。 – user2467128

+0

嗯,我不知道你的代碼是什麼樣的,這不再與這個特定的問題有關。 – TreeTree