2013-03-08 36 views
-1

原諒我對這個(我是Flash新手)的無知,但我到處搜索了3天才找到這個,我嘗試了很多不同的東西,似乎沒有任何工作。這應該是簡單的...noob試圖讓這個壞傢伙在Flash遊戲中爆炸

場景:簡單的遊戲,玩家飛過太空拍攝壞人。 (我的起步步驟,這個偉大的教程:http://www.makeflashgames.com/tutorials/tut4.php

我現在想讓我的敵人在發現碰撞時爆炸。我用爆炸動畫製作了一個新的動畫片段,將該動畫片段放到了我敵人動畫片段的一個框架中。這個框架我標記爲Explode。

在GameController.as上,我探討了在檢測到子彈碰撞時移除敵人的代碼,並刪除了removeChild代碼,並將其替換爲: Enemy.gotoAndPlay(「Explode」); 這給我錯誤1061:調用一個可能未定義的方法gotoAndPlay通過靜態類型的引用類。

我試過了_root.Enemy.gotoAndPlay(「Explode」); 它沒有工作(我讀_root不能在as3中工作)

我錯過了什麼?

我寫的代碼位於幾個不同的區域。在gamecontroller.as 我有

 for (var i=bullets.length - 1; i >= 0; i--) 
     { 
      for (var j=enemies.length - 1; j >= 0; j--) 
      { 
       if (bullets[i].hitTestObject(enemies[j].collisionArea)) 
       { 

        playerScore += enemies[j].getPointsWorth(); 

        mcGameStage.removeChild(bullets[i]); 
        bullets.splice(i,1); 

        Enemy.gotoAndPlay("Explode"); 

        break; 
       } 
      } 
     } 

如果刪除了的gotoAndPlay,只是放在一個

mcGameStage.removeChild(敵人[J]); enemies.splice(j,1);

那麼遊戲運行正常(沒有爆炸動畫)

@Sunil d: 你的代碼的工作就像一個魅力。但是,它給我帶來了一個新問題。我需要刪除我的敵人時爆炸動畫完成(框架35) 我想這個代碼

enemy.addEventListener(Event.ENTER_FRAME,checkFrame); 

function checkFrame(event:Event):void 
    { 
     if (enemy.currentFrame == 35) 
      { 
        mcGameStage.removeChild(enemies[j]); 
        enemies.splice(j,1); 
        enemy.removeEventListener(Event.ENTER_FRAME,checkFrame); 
      } 
    } 

這是給我的錯誤#2007:參數孩子必須爲非空。 at flash.display :: DisplayObjectContainer/removeChild() at MethodInfo-243()

任何想法?

回答

0

你得到的錯誤是,當你做Enemy.gotoAndPlay("Explode");你試圖調用Enemy類本身的gotoAndPlay()方法。相反,您需要在Enemy類的實例上調用gotoAndPlay()方法。

從您所顯示的代碼看來,您的enemies陣列(它是Enemy對象的數組)中的Enemy類的實例看起來像。所以你可能應該能夠通過這樣做爆炸敵人:

var enemy:Enemy = enemies[j] as Enemy; 
enemy.gotoAndPlay("Explode"); 
+0

對。謝謝。我不瞭解那裏的差異,但現在你說出來了,這很有道理。 – 2013-03-08 05:11:36