Clickable shapes(可点击的形体)
下面我们先开始创建一个可以点击的形体。
1. 选择文件>新建一个文档,并将它保存为simpleBall.fla. 2. 选择绘制圆工具,在场景中绘制一个正圆。当然在绘制的时候按住shift就可以了。 注意:在绘制时候确何你的Object Drawing mode(对象绘模式)是关闭的。 3.选中选择工具并双击这个形体使它高亮显示 4. 当这个形体选中后,选择编辑modify>Convert to Symbol转换为元件(按F8)来打开元件转换窗口, 5.将名称改为circle然后点击ok,将它转换为影片剪辑。 6. 元件要仍处于选中的状态,在属性面板上为它起一个实例名为:ball_mc 7. 取消对元件的选择打开action面板(F9). 8.在Action面板上输入如下代码:
代码:
ball_mc.addEventListener(MouseEvent.CLICK, clickHandler); function clickHandler(event:MouseEvent):void { trace("You clicked the ball"); }
在这段代码中,ball_mc实例变成了可以点击的了,因为你加入了事件侦听用来检测用户是否有点击动作,无论何时只要用户点击了ball_mc影片剪辑,clickHandler()函数就会执行。这非常类似于之前版本在组件中加入侦听事件,如As2.0使用onPress()事件来检测用户是否点击了剪辑或按钮。 9.选择Control>Test Movie 测试影片,当你点击圆时,就会在面板上输出”you clicked the ball. 10.关闭Swf文件返回Flash操作环境,编辑你的Actionscript 代码,在原有代码的上面加入如下一行代码: ball_mc.buttonMode = true; 11.重新测试你的影片,当你的光标位于圆之上时,光标就会变成一只小手的形状。用于给用户一个提示,这是可以点击的。
Draggable shapes(可拖动的形体)
如果你想让用户可以在场影中拖动这个形体,你需要加入两个事性侦听器,mouseDown(MouseEvent.MOUSE_DOWN)和mouseUp(MouseEvent.MOUSE_UP),如下面的例子。
下面的例子示范如何为mouseDown和mouseUp事件加入事件侦听器
1.编辑我们之前的例子中代码如下:
代码:
ball_mc.buttonMode = true; ball_mc.addEventListener(MouseEvent.CLICK, clickHandler); ball_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); ball_mc.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener); function clickHandler(event:MouseEvent):void { trace("You clicked the ball"); } function mouseDownListener(event:MouseEvent):void { ball_mc.startDrag(); } function mouseUpListener(event:MouseEvent):void { ball_mc.stopDrag(); }
2.测试你的影片。你就可拖动这个圆了。 虽然我们编写这个例子没有花费我们多少时间,但如果再让你写一个可拖动的形体,你可能不会情愿去写,假想你能将你的代码转换为与元件连接的外部类文件,它可以自动的创建可拖动的形体,会在将来结省你的大量时间。下面我们就看如何实现。
Converting code into a class(将你的代码转换成类)
下面的例子创建一个Actionscript类它封装整个影片剪辑的拖动的实现逻辑。现在不管什么时候,只要创建一个类的新的实例被创建,它就是可拖动的。无须为场景中的每个实例去写代码。
1.创建一个新的Fla文档并将它保存为fancyBall.fla. 2.选择File>New选择Actionscript File创建一个新的Actionscript文件。 3.保存这个Actionscript文件为Ball.as与Fla文件为同一路径下。也就是刚才创建的fancyBall.fla. 4. 在里面输入如下代码:
代码:
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class Ball extends MovieClip { public function Ball() { trace("ball created: " + this.name); this.buttonMode = true; this.addEventListener(MouseEvent.CLICK, clickHandler); this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); this.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener); } private function clickHandler(event:MouseEvent):void { trace("You clicked the ball"); } function mouseDownListener(event:MouseEvent):void { this.startDrag(); } function mouseUpListener(event:MouseEvent):void { this.stopDrag(); } } }
上面的代码定义了一个新类名为Ball,它继承了MovieClip类(内置在flash.display package中).注意在使用As3.0书写外部类时,你必须明确的导入所需要类。不同于在Fla内部书写代码。 5.保存并关闭Ball.as文档,然后打开fancyBall.fla文档。 6. 使用绘制圆工具,在场景中绘制一个圆并将转换为movieClip. 7.右击刚刚建立的圆,选择链接。 8.选择Export for ActionScript(为action导出),在Class(类)的输入框中输入类名Ball 9.点击ok.关闭此面板。 10.确何这个圆的实例在场景中,测试影片。观看是否与之前的效果是一样的。 它看起来很不错,下面的例子我们来看如何动态的创建类实例。
Dynamically creating instances of a class(动态创建类实例)
你不需要在创作时总是将元件拖动到场景中,你也可以通过使用Actionscirpt新操作方法在库中创建新的类实例。
Using the new operator(使用新的操作)
之前的Actionscript在创建新的MovieClip或是TextField实例时是通过使用如MovieClip.attachMovie(),MovieClip.createEmptyMovieClip(),或MovieClip.createTextField().来创建的。在ActionScript 3.0中,你可以通过类似如new Ball()的方法创建新的MovieClip,TextField,Sprite,和Video 实例—或是你自定义的类,如下方法: 1.打开fancyBall.fla.将场景中的所有实例元件删去,在主时间线上加入如下代码:
代码:
var b1:Ball = new Ball();
2.按下ctrl +回车测试,注意,我们会发现没有任何东西出现在场景中,但是在输出面板上会显示:“ball created: instance1”,尽管Flash创建了ball的一个新的实例,但它是不可视的,因为你没有使用addChild()将它加入到显示列表中。 3.编辑代码,将b1实例加入到显示列表中。测试。
代码:
addChild(b1);
下一部你需要使用document class,它将允许你将代码从主时间轴的第一帧上移到一个外部文档中,它类似与之前例子中的通过元件与类连接.
Using the Document Class text box(使用Document class输入框)
下面示范如何将你的代码从主时间轴移到一个外部的As文件中。
1.删去fancyBall.fla第一帧上的代码。 2.创建一个新的Actionscript文档保存为BallDocumentClass.as,与fancyBall.fla处于同一目录下。 3.加入如下代码在BallDocumentClass.as中:
代码:
package { import flash.display.MovieClip; public class BallDocumentClass extends MovieClip { private var tempBall:Ball; private var MAX_BALLS:uint = 10; public function BallDocumentClass() { var i:uint; for (i = 0; i < MAX_BALLS; i++) { tempBall = new Ball (); tempBall.scaleX = Math.random(); tempBall.scaleY = tempBall.scaleX; tempBall.x = Math.round(Math.random() * (this.stage.stageWidth - tempBall.width)); tempBall.y = Math.round(Math.random() * (this.stage.stageHeight - tempBall.height)); addChild(tempBall); } } } }
4.保存并关闭这个as文档,打开fancyBall.fla. 5.在属性面板的document class后面的输入框中输入BallDocumentClass,保存文件。 6.测试,你会发现有10个大小位置不同的元件出现在场景中。 使用Document Class允许你将代码放置在外部文件中,而不是时间线上,可以在许许的fla文件重用代码,并且在团队协作版本控制系统(CVS)中,更容易共享代码。
总结:
这篇文章只是对As3.0的一个简单应用介绍,只要告诉大家如何创建简单的类,如何使用改良的侦听事件模型,如何使用document class.
Ps by egoldy:学完这篇文章,你会发现自已也可以编写在fla中看不见一行代码的程式了,真正的是界面与代码分离,控制,看上去真的是很酷,如果你也在学习As3.0,别忘了把你的心得分享一下。Cheers J.
源文件下载
出处:WebStudio
责任编辑:moby
上一页 探索F9 As3.0 Preview [1] 下一页
◎进入论坛Flash专栏版块参加讨论
|