其实前边的3种都叫自定义类。
这次的例子,主要是看一下自定义类怎么用,有什么好处。
建议下载源码对应来看。
先看一下最终效果:
点击不同的按钮,超级玛丽会切换到不同的状态。
Main.as代码如下:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Main extends MovieClip {
public function Main() {
// constructor code
stand.addEventListener(MouseEvent.CLICK,clickStand);
walk.addEventListener(MouseEvent.CLICK,clickWalk);
run.addEventListener(MouseEvent.CLICK,clickRun);
jump.addEventListener(MouseEvent.CLICK,clickJump);
}
private function clickStand(e:MouseEvent):void{
mario.stand();
}
private function clickWalk(e:MouseEvent):void{
mario.walk();
}
private function clickRun(e:MouseEvent):void{
mario.run();
}
private function clickJump(e:MouseEvent):void{
mario.jump();
}
}
}
stand,walk,run,jump是舞台上的按钮,mario是元件Mario的一个实例,直接拖放到舞台上的。
Mario.as代码如下(对应影片剪辑来看,影片剪辑帧上有代码,这里还用到了帧标签):
package {
import flash.display.MovieClip;
public class Mario extends MovieClip {
public function Mario() {
// constructor code
trace("Mario");
}
/**
* 原地站立
*/
public function stand():void{
gotoAndPlay("stand");
}
/**
* 行走
*/
public function walk():void{
gotoAndPlay("walk");
}
/**
* 跑
*/
public function run():void{
gotoAndPlay("run");
}
/**
* 跳
*/
public function jump():void{
gotoAndPlay("jump");
}
}
}
————————————————————
扩展:
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;)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。