2014-01-12 101 views
0

我作爲一個畢業設計製作遊戲,遇到了一些小問題。遊戲的目標是儘可能長時間地操縱船隻並避開小行星。我快完成了,但我現在正在嘗試解決碰撞檢測問題。達到其他功能的變量

我的問題是我如何到達循環變量中的敵人,以便它可以檢查與它的碰撞?下面是代碼:

package com.asgamer.basics1 
{ 
    import flash.display.MovieClip; 
    import flash.display.Stage; 
    import flash.events.Event; 

    public class Engine extends MovieClip 
    { 


    private var numStars:int = 80; 

    private static var enemyList:Array = new Array(); 

    private var ourShip:Ship; 

    public function Engine() : void 
    { 

     ourShip = new Ship(stage);   
     ourShip.x = stage.stageWidth/2; 
     ourShip.y = stage.stageHeight/2; 
     stage.addChild(ourShip); 


     for (var i:int = 0; i < numStars; i++) 
     { 
      stage.addChildAt(new Star(stage), 1) 
     } 


     addEventListener(Event.ENTER_FRAME, loop, false, 0, true); 
     stage.addEventListener(Event.ENTER_FRAME, krash); 



    } 


    private function krash(e:Event) : void 
    { 
     function krash(e:Event):void 
     {     

      if (enemy.hitTestObject(ourShip)==true) 
      { 
        stage.removeChild(ourShip); 
        stage.removeEventListener(Event.ENTER_FRAME, krash); 
      } 
     } 
    } 

    private function loop(e:Event) : void 
    { 

     if (Math.floor(Math.random() * 10) == 5) 
     { 

      var enemy:Asteroid = new Asteroid(stage); 

      enemy.addEventListener(Event.REMOVED_FROM_STAGE, removeEnemy, false, 0, true); 

      enemyList.push(enemy); 

      stage.addChild(enemy); 



     } 
    } 



    private function removeEnemy(e:Event) 
    { 
     enemyList.splice(enemyList.indexOf(e.currentTarget), 1); 
    } 




} 

} 

正如你可以看到我有製作被稱爲環敵人的功能,以及名爲krash碰撞檢測功能。但是因爲敵人是循環內部的變量,所以我怎樣才能在krash函數中檢查與它的碰撞。 (排序新的動作,所以我不知道術語都很好)

回答

0

在克拉什你需要檢查每個enemyenemyList

例如:

private function krash(e:Event) : void 
{ 
    function krash(e:Event):void 
    {     
     for(var i:int = 0; i < enemyList.length; i++) 
     { 
      if (enemyList[i].hitTestObject(ourShip)==true) 
      { 
        stage.removeChild(ourShip); 
        stage.removeEventListener(Event.ENTER_FRAME, krash); 
      } 
     } 
    } 
} 


不幸的是,如果你在舞臺上有很多敵人的計劃會因爲你檢查與他們的每一幀碰撞有點滯後。


另外,我想reccommend你添加一些東西從屏幕上刪除敵人:P

private function removeEnemy(e:Event) 
{ 
    enemyList.splice(enemyList.indexOf(e.currentTarget), 1); 
    stage.removeChild(enemyList.indexOf(e.currentTarget)); 
} 



希望這有助於。

+0

謝謝!我有一個移除小行星類中的敵人的功能,所以不應該是一個問題。但是我添加了這個功能,而且我仍然通過了敵人。如果你有時間,我會非常感激,如果你可以看看它。 http://www.mediafire.com/download/l7rdn07i26njgw6/Ship+game.rar – user3177484

+0

你好,對不起,我忘了這一點,因爲我想你能解決如何使用它。我下載了你的遊戲,問題出現在「engine.as」的「krash」功能中。你需要刪除第二行,它是右大括號。 – Zoron19

+0

你先生,真棒!現在它正在工作。 :d – user3177484