24
2015
03

(十六)自定义类

其实前边的3种都叫自定义类。

这次的例子,主要是看一下自定义类怎么用,有什么好处。

建议下载源码对应来看。

先看一下最终效果:

点击不同的按钮,超级玛丽会切换到不同的状态。

Main.as代码如下:

  1. package  {

  2. import flash.display.MovieClip;

  3. import flash.events.MouseEvent;

  4. public class Main extends MovieClip {

  5. public function Main() {

  6. // constructor code

  7. stand.addEventListener(MouseEvent.CLICK,clickStand);

  8. walk.addEventListener(MouseEvent.CLICK,clickWalk);

  9. run.addEventListener(MouseEvent.CLICK,clickRun);

  10. jump.addEventListener(MouseEvent.CLICK,clickJump);

  11. }

  12. private function clickStand(e:MouseEvent):void{

  13. mario.stand();

  14. }

  15. private function clickWalk(e:MouseEvent):void{

  16. mario.walk();

  17. }

  18. private function clickRun(e:MouseEvent):void{

  19. mario.run();

  20. }

  21. private function clickJump(e:MouseEvent):void{

  22. mario.jump();

  23. }

  24. }

  25. }

stand,walk,run,jump是舞台上的按钮,mario是元件Mario的一个实例,直接拖放到舞台上的。

Mario.as代码如下(对应影片剪辑来看,影片剪辑帧上有代码,这里还用到了帧标签):

  1. package  {

  2. import flash.display.MovieClip;

  3. public class Mario extends MovieClip {

  4. public function Mario() {

  5. // constructor code

  6. trace("Mario");

  7. }

  8. /**

  9. * 原地站立

  10. */

  11. public function stand():void{

  12. gotoAndPlay("stand");

  13. }

  14. /**

  15. * 行走

  16. */

  17. public function walk():void{

  18. gotoAndPlay("walk");

  19. }

  20. /**

  21. * 跑

  22. */

  23. public function run():void{

  24. gotoAndPlay("run");

  25. }

  26. /**

  27. * 跳

  28. */

  29. public function jump():void{

  30. gotoAndPlay("jump");

  31. }

  32. }

  33. }


————————————————————

扩展:

1、什么是帧标签?

其实就是给关键帧起的名字。调用gotoAndStop,gotoAndPlay时用。假如我们用的是帧号,当我们调整动画导致帧号变了的话,就需要改变代码;如果我们用的是帧标签,只要保证帧标签的位置对了就行,就可以不用改代码了。

2、关于public。

以前在帧上写代码时,没有见过public,而且如果你试试在帧上写public的话,是会报错的。

public是一个访问控制符,AS3有4个访问控制符:private(私有-类内可访问)、internal(包内可访问)、protected(子类可访问)、public(公有-内部外部皆可访问)。

参考:http://bbs.9ria.com/forum.php?highlight=private+static&mod=viewthread&tid=86626

一开始会用public和private就可以了。比如,如果我们把public function jump():void{}写成private function jump():void{}的话,当我们调用mario.jump()的时候就会报错,因为private是不允许外部访问的,只能在Mario类的大括号内访问。

3、自定义类的好处。

其实我们不用定义一个Mario类,一样能够做出这个效果,那么为什么还要定义一个类呢?

我的理解是:为了抽象。

你看我们文档类里,就只是侦听按钮点击,点击了按钮,让玛丽执行相应的方法,根本不用管方法具体是怎么实现的。而且,当我们需要改效果的时候,只需要改Mario.as就可以了。

4、自动声明舞台实例。

舞台上的4个按钮,我们并没有定义,但是在文档类里,可以直接来用。对于纯程序员来说,这个是不能忍受的。其实这个也是flash软件自动为我们声明了。如下图,“自动声明舞台实例”默认是勾选的。

即使是可以自动声明,还是建议手动声明一下(否则,当swf作为资源被其他swf文件load时,可能会出问题;声明之后,可以用代码提示),注意必须声明为public。比如本节例子中的按钮stand,它是一个按钮,所以应该这样声明public var stand:SimpleButton;(记得import flash.display.SimpleButton;)。






打包下载源文件

« 上一篇下一篇 »

相关文章:

页游安全攻与防(转)  (2016-3-4 21:49:54)

使用NetStream实现p2p(1)  (2016-3-1 20:34:19)

FLEX 迷你教程 — 基于STRATUS的P2P网络电话(转)  (2016-3-1 11:10:6)

流程图连线算法  (2015-9-10 17:2:27)

(十五)类  (2015-3-24 14:25:51)

(十四)链接类  (2015-3-24 13:38:15)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。