2014-01-12 59 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