Как Flash может понять вызов определенной функции класса, когда имя функции не совпадает с именем calss или объекта? - PullRequest
1 голос
/ 28 декабря 2010

В ActionScript всегда, когда я объявляю класс для объекта, я использую одно и то же имя объекта для класса и функции, которую я хочу вызвать. Например, если объектом является Card, имена классов и функций также являются Card.

Но впервые в книге об университетском программировании игр AS я вижу объявленный класс, который не такой, как я сказал.

часть книги учит "как создать игру", и они объявляют два класса для игры. основной класс - это сопоставление карт и всего, что нам нужно для создания игры. а второй класс просто для того, чтобы переворачивать карты и просто для большей красоты. в первом мы создаем новый символ во втором кадре для вызова класса и его функции, и имена совпадают. поэтому, когда мы достигаем второго кадра, символ вызывает свой класс, а затем свою функцию. и один из экранных объектов в этом кадре - «Карта». и нам нужно, чтобы эти карты переворачивались, когда они переворачиваются, и мы не делаем это, создавая для них movieClip, мы просто делаем это, написав AS для карт. Вы можете увидеть ActionScript здесь:

Мой вопрос: какую функцию Flash выберет для воспроизведения, если имя функции не совпадает с именем объекта и класса? (здесь это "Карта")

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

    public dynamic class Card extends MovieClip {
      private var flipStep:uint;
      private var isFlipping:Boolean = false;
      private var flipToFrame:uint;

      // begin the flip, remember which frame to jump to
      public function startFlip(flipToWhichFrame:uint) {
         isFlipping = true;
         flipStep = 10;
         flipToFrame = flipToWhichFrame;
         this.addEventListener(Event.ENTER_FRAME, flip);
      }

      // take 10 steps to flip
      public function flip(event:Event) {
         flipStep--; // next step
         if (flipStep > 5) { // first half of flip
            this.scaleX = .2*(flipStep-6);
         } else { // second half of flip
            this.scaleX = .2*(5-flipStep);
         }

         // when it is the middle of the flip, go to new frame
         if (flipStep == 5) {
            gotoAndStop(flipToFrame);
         }

         // at the end of the flip, stop the animation
         if (flipStep == 0) {
            this.removeEventListener(Event.ENTER_FRAME, flip);
         }
     }
  }
}

1 Ответ

2 голосов
/ 28 декабря 2010

Когда вы создаете класс в Actionscript, у вашего класса есть специальная функция, называемая конструктором, которая фактически имеет то же имя, что и класс.

      public class MyExample
      {
          public function MyExample()
          {
                trace('MyExample constructor!');
          }
      }

Когда вы создаете экземпляр своего класса, вызывается конструктор.

     // trace 'MyExample constructor!'
     private var ex1:MyExample = new MyExample();

Ваш класс может иметь открытые методы, которые, в отличие от вашего конструктора классов, не будут автоматически вызываться

      public class MyExample
      {
          public function MyExample()
          {
                trace('MyExample constructor!');
          }

          public function letsFlipSomeCards():void
          {
                trace('I like this card game!');
          }
      }

Вам нужно будет специально вызывать их:

    private var ex1:MyExample;

    private function init():void
    {
         ex1 = new MyExample(); // trace 'MyExample constructor!'
         ex1.letsFlipSomeCards(); // trace 'I like this card game!'
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...