2014-01-12 6 views
0

Im делая игру как проект окончания и столкнулся с небольшой проблемой. Цель игры - маневрировать кораблем и избегать астероидов как можно дольше. Я почти закончен, но теперь я пытаюсь решить проблему обнаружения столкновений.Достижение переменных в других функциях

Моя проблема заключается в том, как мне добраться до врага в переменной цикла, чтобы он мог проверить наличие столкновения с ним? Вот код:

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. (Относительно новых к actionscript, поэтому я не знаю терминологию все хорошо)

ответ

0

В krash вам нужно будет проверить каждый enemy в enemyList.

пример:

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); 
      } 
     } 
    } 
} 


К сожалению, если у вас есть много врагов на этапе программа будет отставать немного, потому что вы проверяете столкновения со всеми из них каждого кадра.


Кроме того, я рекомендую вам добавить что-то, чтобы удалить вас врагов с экрана: 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

Привет, извините, я забыл об этом, потому что думал, что вы можете решить, как его использовать. Я загрузил вашу игру, и проблема в функции «krash» в «engine.as». Вам нужно удалить вторую строку и закрыть ее. – Zoron19

+0

Вы, сэр, потрясающие! Теперь он работает. : D – user3177484

Смежные вопросы