当函数的名称与calss或object的名称不同时,Flash如何理解调用类的已定义函数?

时间:2010-12-27 22:13:30

标签: flash actionscript-3 actionscript

在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 个答案:

答案 0 :(得分:2)

当您在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的优秀教程的一些搜索,您将获得很多关于书籍或视频教程的建议,这些建议可以为您提供良好的语言开端。