建站极客
媒体动画 Flash教程 正文
Flash编写类及外部as文件的方式
所属分类:
媒体动画 / Flash教程
阅读数:
41
收藏 0
赞 0
分享
我们已经了解到了在flash 9中如可在时间线上编写代码,如何将现有的时间线上的代码转换为外部类.以及flash9的Document Class形式,接下来我们要更细一步的来研究编写类及外部as文件的方式.
include
如果你之前了解As1.0,As2.0编程,那么对include一定不陌生,在Actionscript 3.0中我们仍可以使用include 来导入代码. 如下的例子:
1.打开flash新建一个文档,保存为drag_inclue.fla在场景中创建一个movieclip,本例中使用的圆球,将其转换为影片剪辑,并在场景中将其命名为circle_mc. 不需要在库中设置链接属性. 2.新增一层,按下F9打开Actionscript面板,在其中输入代码如下: 代码:
//设置当光标移到circle_mc上时显示手形 circle_mc.buttonMode = true; // 侦听事件 circle_mc.addEventListener(MouseEvent.CLICK,onClick); circle_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown); circle_mc.addEventListener(MouseEvent.MOUSE_UP,onUp); //定义onClick事件 function onClick(event:MouseEvent):void{ trace("circle clicked"); } //定义onDown事件 function onDown(event:MouseEvent):void{ circle_mc.startDrag(); }
function onUp(event:MouseEvent):void{ circle_mc.stopDrag(); }
3.将此帧上的代码全部选中,按下ctrl x剪切掉,选择flash的new菜单,新建一个Actionscript文件,在刚剪切掉的代码贴上.保存名为drag_include.as.与drag_include.fla在同一路径下. 4.回到drag_include.fla中,在第一帧上输入如下代码: include "drag_include.as" 测试影片即可以看到与时间线上测试时相同的结果了.此种方式,在As1.0时经常使用.如果你仍习惯这种方式,在Actionscript 3.0中仍可以使用.
元件类(symbol class)
这里所说的元件件类,实际是指为flash影片中的元件指定一个链接类名.它与上面的include 的不同之处于,它使用的是严格的类结构.而不是我们习惯上的时间线编写方式.我们要将小圆球的拖动功能封装起来,这样不论你创建多少可以拖动的小球,都会变得很轻松,只需要创建它的实例并显示出来即可。 我们仍使用上例来说明问题.打开drag_include.fla文件,将其另存为Symbol_class.fla文件,新建一个Actionscript文件,将其保存为Symbol_class.as文件,与Symbol_class.fla文件在相同目录下。现在我们将上面的例子中的代码抽象成类如下: 代码:
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class Symbol_class extends MovieClip { public function Symbol_class(){ this.buttonMode = true; this.addEventListener(MouseEvent.CLICK,onClick); this.addEventListener(MouseEvent.MOUSE_DOWN,onDown); this.addEventListener(MouseEvent.MOUSE_UP,onUp); } private function onClick(event:MouseEvent):void{ trace("circle clicked"); } private function onDown(event:MouseEvent):void{ this.startDrag(); } private function onUp(event:MouseEvent):void{ this.stopDrag(); } } }
因为我们将类的名称设置为Symbol_class,所以此类文件一定要保存为Symbol_class.as文件.我们还要做一步工作,在源文件中打开库面板,右击circle_mc选择链接,复选Export for Actionscript.在class处输入Symbol_class.as即让我们类与元件相关连..此时测试影片,你会看到与上例中相同的结果.这里注意一点,场景中仍要保证circle_mc的存在.因为在代码中我们并没有动态的贴加circle_mc. 同时这个例子中,与上例一样,我们并没有使用As3.0的Document Class特性.
动态类(dynamic class)
此种编写的类的方式与探索Actionscript3.0 flash9 Preview教程中的例子是一样的,此种方式是最最常用的.对于一些稍复杂的程序来说,是由主类和多个辅助类组成的.辅助类封装分割开的功能,主类用来显示和集成各部分功能。如上例我们已经封装了小球的拖动功能。现在我们想要创建100个这样可以拖动的小球。 如下演示:
思路是我们已经创建了封装了拖动功能的类,我们在创建一个主类,用来显示这100个具有拖动功能的小球,我们将使用As3.0的DocumnetClass 新特性. 如下:我们将主类命名为DocumentClass.as, 封装后的拖动球功能我们命名为Drag_class.as. DocumentClass.as 代码:
package { import flash.display.MovieClip; public class DocumentClass extends MovieClip { // 属性 private var _circle:Drag_circle; private var _wslink:wslink; private const maxBalls:int = 100; // 构造函数 public function DocumentClass(){ var i:int; // 循环创建小球 for(i=0;i<=maxBalls; i ){ // 创建可拖动小球的实例 _circle = new Drag_circle(); // 设置小球实例的一些属性 _circle.scaleY = _circle.scaleX = Math.random(); // 场景中的x,y位置 _circle.x= Math.round(Math.random()*(stage.stageWidth - _circle.width)); _circle.y= Math.round(Math.random()*(stage.stageHeight - _circle.height)); // 在场景上显示 addChild(_circle); } } } }
Drag_circle.as类
代码:
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Drag_circle extends Sprite { public function Drag_circle(){ this.buttonMode = true; this.addEventListener(MouseEvent.CLICK,onClick); this.addEventListener(MouseEvent.MOUSE_DOWN,onDown); this.addEventListener(MouseEvent.MOUSE_UP,onUp); } private function onClick(event:MouseEvent):void{ trace("circle clicked"); }
private function onDown(event:MouseEvent):void{ this.startDrag(); }
private function onUp(event:MouseEvent):void{ this.stopDrag(); } } }
打开我们之前所用过的fla文件,将其另存为drag_class.fla文件,与Document.as和Drag_class.as类所在目录相同。打开库面板,选中库面板中的小球,右击选择链接在class名称处输入Drag_class.注意与上面的元件类不同在于,我们不需要让场景中有任何内容,因为我们已在主类DocumentClass.as中动态的贴加和显示了circle_mc.。在DocumentClass.fla中的主场景中,在属性面板中的Document Class输入框中输入我们的主类名DocumentClass.然后你就可以测试了。
不使用库元件的动态类(dynamic class with no library)
在上例中我们使用的是已创建好的影片剪辑,并在库中做了类的链接,这种情况对于一些有复杂图形的情况下是比较好的选择,如果你能很熟练的应用Drawing Api绘制出你想要的任意图形,那么你也可以不使用库元件,可以直接在类中编写,在本教程中我们主要研究的是这种方式,接下来我们看不使用库元件如何编写类来实现上面的功能。 很显然即然不使用库中的元件,那么我们就需要在类中直接使用Drawing Api来直接绘制。如下,类的结构与动态类是相同的。我们需要在上例的基础上做些改动 首先删去fla中场景中的所有内容,包括库中的内容。
DocumentClass.as类如下:
代码:
package { import flash.display.MovieClip; public class DocumentClass extends MovieClip { private var _circle:Drag_circle; private const maxBalls:int = 100;
public function DocumentClass(){ var i:int; for(i=0;i<=maxBalls; i ){ _circle = new Drag_circle(); _circle.scaleY = _circle.scaleX = Math.random(); _circle.x= Math.round(Math.random()*(stage.stageWidth - _circle.width)); _circle.y= Math.round(Math.random()*(stage.stageHeight - _circle.height)); addChild(_circle); } } } }
Drag_circle.as类
代码:
package { import flash.display.Sprite; import flash.display.Shape; import flash.events.MouseEvent;
public class Drag_circle extends Sprite { private var _circle:Sprite; public function Drag_circle(){ _circle = new Sprite(); _circle.graphics.beginFill(0xff0000); _circle.graphics.drawCircle(-5, -5, 10); _circle.graphics.endFill(); _circle.buttonMode =true; addChild(_circle); _circle.addEventListener(MouseEvent.CLICK,onClick); _circle.addEventListener(MouseEvent.MOUSE_DOWN,onDown); _circle.addEventListener(MouseEvent.MOUSE_UP,onUp); } private function onClick(event:MouseEvent):void{ trace("circle clicked"); }
private function onDown(event:MouseEvent):void{ _circle.startDrag(); }
private function onUp(event:MouseEvent):void{ _circle.stopDrag(); } } }
注意Drag_circle.as类,我们只是增加了一段:
代码:
_circle = new Sprite(); _circle.graphics.beginFill(0xff0000); _circle.graphics.drawCircle(-5, -5, 10); _circle.graphics.endFill();
还有就是构造函数之前的声明:private var _circle:Sprite; 测试你的影片。当然这里我们绘制的只是一个无渐变的红色园形。
Package Class
一般来说,一个.as文件中就一个类,但是在AS3中,现在允许在一个文件中定义多个类用来辅助主类。 在.as文件中的辅助类,必须定义在类包以外,并且只针对此文件中的主类和其他辅助类可见。它的基本结构如下: 代码:
package { class MyClass { function MyClass() { var helper:MyHelper = new MyHelper(); } } } class MyHelper { function MyHelper() { var helper:HelpersHelper = new HelpersHelper(); } } class HelpersHelper { function HelpersHelper () { } }
注意,在包块中最多只能定义一个类。在同一个文件中的辅助类不是包块的一部分,并且只能在此文件中可见和被使用。
下面我们将我们将我们的类改写成上述的packge类形式。我们将下面的代码都写在一个DocumentClass.as的文件中,然后在fla文件中的属性面板中的Document Class输入框中输入DocumentClass类名。 代码:
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.MouseEvent; // Document Class public class DocumentClass extends MovieClip { private var _circle:Drag_circle; private const maxBalls:int = 100; public function DocumentClass(){ var i:int; for(i=0;i<=maxBalls; i ){ _circle = new Drag_circle(); _circle.scaleY = _circle.scaleX = Math.random(); _circle.x= Math.round(Math.random()*(stage.stageWidth - _circle.width)); _circle.y= Math.round(Math.random()*(stage.stageHeight - _circle.height)); addChild(_circle); } } } public class Drag_circle extends Sprite { private var _circle:Sprite; public function Drag_circle(){ _circle = new Sprite(); _circle.graphics.beginFill(0x6D6E71); _circle.graphics.drawCircle(-5, -5, 10); _circle.graphics.endFill(); addChild(_circle); this.buttonMode = true; _circle.addEventListener(MouseEvent.CLICK,onClick); _circle.addEventListener(MouseEvent.MOUSE_DOWN,onDown); _circle.addEventListener(MouseEvent.MOUSE_UP,onUp); } private function onClick(event:MouseEvent):void{ trace("circle clicked"); }
private function onDown(event:MouseEvent):void{ _circle.startDrag(); } private function onUp(event:MouseEvent):void{ _circle.stopDrag(); } } }
现在就可以测试你的影片了。
Flash cs3绘制人物高级行走动画教程 本教程向大家介绍Flash cs3绘制人物高级行走动画效果,教程难度不是很大,绘制方法及过程介绍的也非常详细,教程很实用,转发过来,希望大家喜欢
评论 0
收藏 0
赞 0
分享
Flash CS4来制作漂亮的气泡动画教程 本教程向脚本之家的朋友介绍用Flash CS4来制作漂亮的气泡动画,制作出来气泡真的很好看,制作效果是采用代码形式实现,觉得很不错,转发过来,感兴趣的朋友可以一起来学习
评论 0
收藏 0
赞 0
分享
Flash教程:动画背景的绘制方法之透视篇(给新手) Flash动画在网络上的广泛传播,已经成为上网一族喜闻乐见的一种艺术形式。动画背景的绘制方法有很多,也有很多表现方法。这里将结合透视学的基础知识向大家简单的介绍一下动画背景的绘制。
评论 0
收藏 0
赞 0
分享
flash基础教程:混色器面板图文介绍 混色器面板是Flash中用于色彩处理的一个重要面板,熟练地使用该面板,可以帮助用户快速地完成色彩的填充,编辑出色彩丰富的图形。本教程为大家详细介绍一下混色器面板,希望对大家有所帮助
评论 0
收藏 0
赞 0
分享
25个绝对让你应接不暇的Flash网站创意 在Web设计过程中,运用成熟的Flash技术可以把你任意想到的idea表现到产品页面中。这里为你整理发现了25个绝对让你应接不暇的 Flash网站创意,更好地体现网站的互动应用,同时可以让你大饱眼福,一起来欣赏吧
评论 0
收藏 0
赞 0
分享
教你用Flash制作非常酷的二进制时钟动画 今天在这个教程中我们将学习用Flash做一个不同寻常的,但非常酷的时钟:一个二进制时钟,中间用到了代码,但介绍地很详细,相信很值得大家学习
评论 0
收藏 0
赞 0
分享
查看更多