2012-06-02 2 views
0

Когда я нажимаю на автомобиль (MouseEvent.MOUSE_DOWN), автомобиль исчезает и выполняется функция verlaagLevens(). Это работает (но я вложил в него комментарии, хотя)Actionscript 3: hitTestObject внутри классов

Теперь вместо clickevent я хочу обнаружить hitTestObject между моим кораблем и тем же автомобилем, но он, похоже, не работает. Это мой автомобиль класса:

package { 
import flash.display.*; 
import flash.events.*; 

public class Car extends MovieClip 
{ 
    //private var hit:uint = 0; 
    private var mySpeed:uint = 0; 
    private var target:Ship; 
    private var stageRef:Stage; 
    public static var instance2:Car; 

    public function Car(stageRef:Stage, target:Ship) { 
     instance2 = this; 
     this.x = x; 
     this.stageRef = stageRef; 
     this.target = target; 
     mySpeed = 10; 
     addEventListener(Event.ENTER_FRAME, beweeg); 
     reset(); 

    } 
    public function reset() { 
     if(Main.end_def == 0){ 
     this.y =0-100/Math.random(); 
     this.x = Math.random()*(1+300-60)+60; 
     } 
     //hit = 0; 

    } 
    public function getroffen() { 

     Main.instance.verlaagLevens(); 
     this.parent.removeChild(this); 

    } 


    public function beweeg(evt:Event):void { 
     if (hitTestObject(target.hit)) 
     { 
      trace("hitTest"); 
      getroffen(); 
      reset(); 
     } 
     this.y += mySpeed; 
     if (this.y>480) { 
      reset(); 
     } 

    } 


} 

}

И это мой главный класс:

package { 

    import flash.display.*; 
    import flash.display.Stage; 
    import flash.events.*; 
    import flash.utils.*; 

    public class Main extends MovieClip 
    { 

     private var aantaltegenliggers:uint = 5; 
     private var _levens:uint = 3; 
     var ourShip:Ship = new Ship(stage); 
     public static var instance:Main; 
     var car:MovieClip; 
     var end = 0; 
     public static var end_def:uint; 


     public function Main() 
     { 
      stop(); 
      instance = this; 
     } 

     public function initGame():void 
     { 
      //add it to the display list 
      stage.addChild(ourShip); 
      ourShip.x = stage.stageWidth/2; 
      ourShip.y = stage.stageHeight/1.3; 

      _levens=3; 
      end_def=0; 
      teken_levens(); 


      for (var i:uint=0; i<aantaltegenliggers; i++) 
       { 
        var myTimer:Timer = new Timer(5000, 1); 
        myTimer.start(); 
        myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent){ 


        if (end==0){ 
        car = new Car(stage, ourShip); 
        car.name = "car"+i; 
        //car.addEventListener(Event.ENTER_FRAME,getroffen); 
        car.addEventListener(Event.ENTER_FRAME,gameover); 
        stage.addChild(car); 

        } 
        }); 


      } 

     } 
      public function verlaagLevens():void 
      { 
       verwijder_een_leven(_levens); 
       _levens--; 
      } 
      // één leven tekenen 
      public function teken_een_leven(levenIndex:uint):void 
      { 
       var leven:MovieClip = new Leven(); // linkage - export voor Actionscript 
       leven.x = levenIndex*35; // positie leven in de x as, 35 pixels opschuiven 
       leven.y = 10; // positie leven in de y as 
       leven.name = "leven"+levenIndex; 
       addChild(leven); // één leven tonen op het scherm 
      } 
      // alle levens tekenen 
      public function teken_levens():void 
      { 
       verwijder_levens(); // verwijder één leven als je de missile niet hebt kunnen raken 
       for (var i:uint=1; i<=_levens; i++) 
       { 
        teken_een_leven(i); 
       } 
      } 
      // een leven van het scherm verwijderen 
      public function verwijder_een_leven(levenIndex:uint):void 
      { 
       if (!(getChildByName("leven"+levenIndex)==null)) 
       { // ! is negatie = logische operator 
        removeChild(getChildByName("leven"+levenIndex)); 
       } 
      } 
      // alle levens verwijderen 
      public function verwijder_levens():void 
      { 
       for (var i:uint=1; i<=_levens; i++) 
       { 
        verwijder_een_leven(i); 
       } 
      } 

      public function gameover(evt:Event):void 
      { 
       if(_levens==0) 
       { 
        if(end_def == 0){ 
        end = 1; 
        stage.removeChild(ourShip); 
        gotoAndStop("gameover"); 
        } 
        end_def=1; 
       } 
      } 



    } 

} 
+0

Я не очень хорошо разбираюсь в ActionScript, поэтому может быть несколько ошибок, я действительно был бы признателен за любую помощь. Благодаря! – Max

ответ

1

Вы выполняете свой хит тест в конструкторе автомобиля, который только называется один время. То, что вы, вероятно, хотите (с тех пор, как двигаетесь в машине), - это проверить на столкновение каждый кадр в своей предыдущей функции. (Это также подразумевает target.hit правильно, я не могу сказать, так как у меня нет доступа к вашему Кораблю, но я дам вам пользу от сомнений).

+0

Хорошо, это что-то. Hittest обнаружен и прослежен. Теперь моя функция beweeg() выглядит следующим образом: общественная функция beweeg (ЭВТ: Event): пустое { \t \t \t если (hitTestObject (target.hit)) \t \t \t { \t \t \t \t \t след (» Трассировка "); \t \t \t \t \t // getroffen(); \t \t \t \t \t \t this.y + = mySpeed; \t \t \t, если (this.y> 480) { \t \t \t \t сброса(); \t \t \t} Но когда я удаляю getroffen(); из комментариев я получаю сообщение об ошибке: TypeError: Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект. – Max

+0

Извините за форматирование, это невозможно при добавлении комментария – Max

+0

Я думаю, проблема в этом .parent.removeChild (this); Когда я отлаживаю, это ошибка, которая возникает – Max

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