|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
您是否有着精彩的Flash作品,您是否想把他转化为屏保程序。
我们已懂得到了在flash9中如可在工夫线上编写代码,怎样将现有的工夫线上的代码转换为内部类.和flash9的DocumentClass情势,接上去我们要更细一步的来研讨编写类及内部as文件的体例.
include
假如你之前懂得As1.0,As2.0编程,那末对include必定不生疏,在Actionscript3.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事务
functiononClick(event:MouseEvent):void{
trace("circleclicked");
}
//界说onDown事务
functiononDown(event:MouseEvent):void{
circle_mc.startDrag();
}
functiononUp(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时常常利用.假如你仍习气这类体例,在Actionscript3.0中仍可使用.
元件类(symbolclass)
这里所说的元件件类,实践是指为flash影片中的元件指定一个链接类名.它与下面的include的分歧的地方于,它利用的是严厉的类布局.而不是我们习气上的工夫线编写体例.我们要将小圆球的拖动功效封装起来,如许不管你创立几能够拖动的小球,城市变得很轻松,只必要创立它的实例并显现出来便可。
我们仍利用上例来讲明成绩.翻开drag_include.fla文件,将其另存为Symbol_class.fla文件,新建一个Actionscript文件,将其保留为Symbol_class.as文件,与Symbol_class.fla文件在不异目次下。如今我们将下面的例子中的代码笼统成类以下:
代码:
package{
importflash.display.MovieClip;
importflash.events.MouseEvent;
publicclassSymbol_classextendsMovieClip{
publicfunctionSymbol_class(){
this.buttonMode=true;
this.addEventListener(MouseEvent.CLICK,onClick);
this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
this.addEventListener(MouseEvent.MOUSE_UP,onUp);
}
privatefunctiononClick(event:MouseEvent):void{
trace("circleclicked");
}
privatefunctiononDown(event:MouseEvent):void{
this.startDrag();
}
privatefunctiononUp(event:MouseEvent):void{
this.stopDrag();
}
}
}
由于我们将类的称号设置为Symbol_class,以是此类文件必定要保留为Symbol_class.as文件.我们还要做一步事情,在源文件中翻开库面板,右击circle_mc选择链接,复选ExportforActionscript.在class处输出Symbol_class.as即让我们类与元件相干连..此时测试影片,你会看到与上例中不异的了局.这里注重一点,场景中仍要包管circle_mc的存在.由于在代码中我们并没有静态的贴加circle_mc. 同时这个例子中,与上例一样,我们并没有利用As3.0的DocumentClass特征.
静态类(dynamicclass)
此种编写的类的体例与探究Actionscript3.0flash9Preview教程中的例子是一样的,此种体例是最最经常使用的.关于一些稍庞大的程序来讲,是由主类和多个帮助类构成的.帮助类封装支解开的功效,主类用来显现和集成各部分功效。如上例我们已封装了小球的拖动功效。如今我们想要创立100个如许能够拖动的小球。
以下演示:
思绪是我们已创立了封装了拖动功效的类,我们在创立一个主类,用来显现这100个具有拖动功效的小球,我们将利用As3.0的DocumnetClass新特征.
以下:我们将主类定名为DocumentClass.as,封装后的拖动球功效我们定名为Drag_class.as.
DocumentClass.as
代码:
package{
importflash.display.MovieClip;
publicclassDocumentClassextendsMovieClip{
//属性
privatevar_circle:Drag_circle;
privatevar_wslink:wslink;
privateconstmaxBalls:int=100;
//机关函数
publicfunctionDocumentClass(){
vari:int;
//轮回创立小球
for(i=0;i<=maxBalls;i++){
//创立可拖动小球的实例
_circle=newDrag_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{
importflash.display.Sprite;
importflash.events.MouseEvent;
publicclassDrag_circleextendsSprite{
publicfunctionDrag_circle(){
this.buttonMode=true;
this.addEventListener(MouseEvent.CLICK,onClick);
this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
this.addEventListener(MouseEvent.MOUSE_UP,onUp);
}
privatefunctiononClick(event:MouseEvent):void{
trace("circleclicked");
}
privatefunctiononDown(event:MouseEvent):void{
this.startDrag();
}
privatefunctiononUp(event:MouseEvent):void{
this.stopDrag();
}
}
}
翻开我们之前所用过的fla文件,将其另存为drag_class.fla文件,与Document.as和Drag_class.as类地点目次不异。翻开库面板,选中库面板中的小球,右击选择链接在class称号处输出Drag_class.注重与下面的元件类分歧在于,我们不必要让场景中有任何内容,由于我们已在主类DocumentClass.as中静态的贴加和显现了circle_mc.。在DocumentClass.fla中的主场景中,在属性面板中的DocumentClass输出框中输出我们的主类名DocumentClass.然后你就能够测试了。
不利用库元件的静态类(dynamicclasswithnolibrary)
在上例中我们利用的是已创立好的影片剪辑,并在库中做了类的链接,这类情形关于一些有庞大图形的情形下是对照好的选择,假如你能很纯熟的使用DrawingApi绘制出你想要的恣意图形,那末你也能够不利用库元件,能够间接在类中编写,在本教程中我们次要研讨的是这类体例,接上去我们看不利用库元件怎样编写类来完成下面的功效。
很明显即然不利用库中的元件,那末我们就必要在类中间接利用DrawingApi来间接绘制。以下,类的布局与静态类是不异的。我们必要在上例的基本上做些修改
起首删往fla中场景中的一切内容,包含库中的内容。
DocumentClass.as类以下:
代码:
package{
importflash.display.MovieClip;
publicclassDocumentClassextendsMovieClip{
privatevar_circle:Drag_circle;
privateconstmaxBalls:int=100;
publicfunctionDocumentClass(){
vari:int;
for(i=0;i<=maxBalls;i++){
_circle=newDrag_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{
importflash.display.Sprite;
importflash.display.Shape;
importflash.events.MouseEvent;
publicclassDrag_circleextendsSprite{
privatevar_circle:Sprite;
publicfunctionDrag_circle(){
_circle=newSprite();
_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);
}
privatefunctiononClick(event:MouseEvent):void{
trace("circleclicked");
}
privatefunctiononDown(event:MouseEvent):void{
_circle.startDrag();
}
privatefunctiononUp(event:MouseEvent):void{
_circle.stopDrag();
}
}
}
注重Drag_circle.as类,我们只是增添了一段:
代码:
_circle=newSprite();
_circle.graphics.beginFill(0xff0000);
_circle.graphics.drawCircle(-5,-5,10);
_circle.graphics.endFill();
另有就是机关函数之前的声明:privatevar_circle:Sprite;
测试你的影片。固然这里我们绘制的只是一个无突变的白色园形。
PackageClass
一样平常来讲,一个.as文件中就一个类,可是在AS3中,如今同意在一个文件中界说多个类用来帮助主类。
在.as文件中的帮助类,必需界说在类包之外,而且只针对此文件中的主类和其他帮助类可见。它的基础布局以下:
代码:
package{
classMyClass{
functionMyClass(){
varhelper:MyHelper=newMyHelper();
}
}
}
classMyHelper{
functionMyHelper(){
varhelper:HelpersHelper=newHelpersHelper();
}
}
classHelpersHelper{
functionHelpersHelper(){
}
}
注重,在包块中最多只能界说一个类。在统一个文件中的帮助类不是包块的一部分,而且只能在此文件中可见和被利用。
上面我们将我们将我们的类改写成上述的packge类情势。我们将上面的代码都写在一个DocumentClass.as的文件中,然后在fla文件中的属性面板中的DocumentClass输出框中输出DocumentClass类名。
代码:
package{
importflash.display.MovieClip;
importflash.display.Sprite;
importflash.events.MouseEvent;
//DocumentClass
publicclassDocumentClassextendsMovieClip{
privatevar_circle:Drag_circle;
privateconstmaxBalls:int=100;
publicfunctionDocumentClass(){
vari:int;
for(i=0;i<=maxBalls;i++){
_circle=newDrag_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);
}
}
}
publicclassDrag_circleextendsSprite{
privatevar_circle:Sprite;
publicfunctionDrag_circle(){
_circle=newSprite();
_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);
}
privatefunctiononClick(event:MouseEvent):void{
trace("circleclicked");
}
privatefunctiononDown(event:MouseEvent):void{
_circle.startDrag();
}
privatefunctiononUp(event:MouseEvent):void{
_circle.stopDrag();
}
}
}
如今就能够测试你的影片了。
flash动画制作软件的界面没有太大的改变,只是在以前的属性面板右侧增加了两个新的选项“参数”和“滤镜”。 |
|