Сценарий действия 3.0. Как получить доступ к объекту MovieClip из другого класса?

Итак, у меня есть 2 класса Main и Enemy. В классе Enemy мне нужно использовать переменные, объявленные в классе Main.

Вот мой класс Main:

   public class Script extends MovieClip {
       var hero:MovieClip;
       var enemy:MovieClip; //These variables are only for example

       public function Game() {
                   hero.x = 100;
                   enemy.x = 200; // that's only example
   }
       function collisionDetected() {
                   enemy.hitBack(); // this is how I call hitBack function from Enemy class
   }

}

А вот мой класс Enemy:

public class Enemy extends MovieClip {
        private var count = 0;

        public function hitBack() {
            count = 0;
            this.addEventListener(Event.ENTER_FRAME, myEnterFrame);
        }

    private function myEnterFrame(e:Script)
    {
       if (count == 20) this.removeEventListener(Event.ENTER_FRAME, myEnterFrame);
       else 
       {
          count++;
          if (hero.x < enemy.x) { //here I need to use variables from Main class
            this.x -= 4;  
          }
           else {
            this.x += 4;  

          }
       }

    }

Я получил следующие ошибки:

1120: Access of undefined property hero.
1120: Access of undefined property enemy.

person Community    schedule 02.05.2014    source источник


Ответы (1)


Вам нужно будет либо перенести это вычисление в класс Main, либо вы также можете передать переменные во вражеский класс. Поскольку ваш пример урезан, я не уверен, что лучше в вашем случае, но я бы склонялся к тому, чтобы перенести расчет, предполагая, что у вас есть более одного врага, пытающегося это сделать.

public class Script extends MovieClip {
       var hero:MovieClip;
       var enemy:MovieClip; //These variables are only for example

       public function Game() {
                   hero.x = 100;
                   enemy.x = 200; // that's only example
                   this.addEventListener(Event.ENTER_FRAME, enterFrame);
       }

       function collisionDetected() {
                   enemy.hitBack(); // this is how I call hitBack function from Enemy class
       }

       function enterFrame(e:Event){
            theEnemyMovieclipClass.myEnterCheck(hero,enemy);
       }




public class Enemy extends MovieClip {
        private var count = 0;

        public function hitBack() {
            count = 0;
        }

    public function myEnterCheck(hero,enemy)
    {
       if (count == 20) {
            // DO SOMETHING
       }
       else 
       {
          count++;
          if (hero.x < enemy.x) { //here I need to use variables from Main class
            this.x -= 4;  
          }
           else {
            this.x += 4;  

          }
       }

    }
}

Таким образом, если у вас их несколько, вы можете перебрать их все и вызвать один и тот же метод onEnterFrame.

person Andrew Sellenrick    schedule 02.05.2014