as3教程flashActionScrip3.docx

上传人:b****8 文档编号:23657561 上传时间:2023-05-19 格式:DOCX 页数:123 大小:673.37KB
下载 相关 举报
as3教程flashActionScrip3.docx_第1页
第1页 / 共123页
as3教程flashActionScrip3.docx_第2页
第2页 / 共123页
as3教程flashActionScrip3.docx_第3页
第3页 / 共123页
as3教程flashActionScrip3.docx_第4页
第4页 / 共123页
as3教程flashActionScrip3.docx_第5页
第5页 / 共123页
点击查看更多>>
下载资源
资源描述

as3教程flashActionScrip3.docx

《as3教程flashActionScrip3.docx》由会员分享,可在线阅读,更多相关《as3教程flashActionScrip3.docx(123页珍藏版)》请在冰豆网上搜索。

as3教程flashActionScrip3.docx

as3教程flashActionScrip3

 

ActionScript3教程系列

【黑羽】ActionScript3.0系列教程

(1):

与Flash9先来一次亲密

接触!

如蒙转载,请留下我的Blog链接:

www.kingda.org,thx)

FlashProfessional9ActionScript3.0Preview版本今天发布了,意味着从此我们从此不仅仅只能

使用Flex2来使用AS3.0,更可以使用我们一直很熟悉的FlashIDE来进行AS3.0开发了。

与Flex2不同,Flash9alpha(即上面的FlashProfessional9ActionScript3.0Preview)允许我们创建

基于时间轴的ActionScript3.0的Fla文档,而不是基于State的MXML文档。

在Flash9alpha里,

我们和以前一样可以在舞台上直接手绘矢量图,创建元件,添加动画,等等。

我黑羽是急性子,先跳开一些特色的介绍,单刀直入,马上来个实例。

边讲解边说说Flash9的

特点。

 

点击看大图,清楚点。

为了照顾新手xdjm们,看图说话一把。

老鸟略过勿看,省得嫌我罗嗦。

呵呵。

新建一个fla,随便画一个方块什么的,双击选中按F8转换成MovieClip。

在属性面板中命名为

kingda_mc。

和以前一模一样。

再新建一层,命名为actions,这是个好习惯,要保持。

选中第一帧,按F9打开动作面板,写入

如下代码。

Control+Enter,在测试窗口中,双击那个方块,就会有trace信息显示出来。

 

//【黑羽】ActionScript3.0系列教程

(1)

 

//http:

//www.kingda.org

 

kingda_mc.doubleClickEnabled=true;

 

kingda_mc.addEventListener(MouseEvent.DOUBLE_CLICK,clickHandler);

 

functionclickHandler(event:

MouseEvent):

void{

trace("哈哈,你双击我了");

 

}

//直接支持双击了,兄弟们,爽不爽^_^

 

稍作解释,这儿有几个和AS2.0不同的地方了。

 

1.AS2.0中,MovieClip是不可以加侦听器地,但AS3.0中,却可以了。

讲点深入的东东给老鸟听,

所有AS3.0中能被我们看见的对象,其祖宗都是DisplayObject类。

标准说法是都间接或直接的继

承于DisplayObject类。

而这个DisplayObject又是EventDispatcher的儿子。

所以,我们就有了这个

推论:

AS3.0中所有能被我们看到的东西,都能发送事件和加侦听器。

完全适用于EventModel.

爽吧,我是爽歪了。

AS2.0中为了解决这个麻烦我还自己编了一个代理发送事件类EventSender。

省了不少事儿,而现在连这个也不用了,霍哈哈。

2.AS3.0中要让MovieClip在接受click事件,rollover事件能够像Button一样,鼠标放上去显示手型,

那么一定要加上一句:

kingda_mc.buttonMode=true;

小事一桩,一笔带过。

3.AS3.0中的事件模型和AS2.0大不一样了。

简而言之,就是“规范”。

不再直接使用字符串来定义事件名称了。

又要讲深一点了,都是使用

了新的const型变量来定义事件字符串名称,一旦定义,不能再更改。

 

publicstaticconstMOVE:

String="move";

 

极大的避免了我们因为手误,打错字符串,而花上一个下午找bug。

使用了这种模式,我们一旦

 

打错,编译器立刻会发现并告诉我们。

多好。

给出一些鼠标事件列表,大家可以替换上面源码中的事件类型,自己试着玩儿。

如,你可以换成MouseEvent.MOUSE_OVER就变成了以前的onRollOver效果。

 

CLICK:

String="click"

 

[static]Dispatchedwhenauserpressesandreleasesthemainbuttonoftheuser'spointingdeviceover

thesameInteractiveObject.MouseEvent

 

DOUBLE_CLICK:

String="doubleClick"

 

[static]Dispatchedwhenauserpressesandreleasesthemainbuttonofapointingdevicetwicein

rapidsuccessionoverthesameInteractiveObjectwhenthatobject'sdoubleClickEnabledflagissetto

true.MouseEvent

 

MOUSE_DOWN:

String="mouseDown"

 

[static]DispatchedwhenauserpressesthepointingdevicebuttonoveranInteractiveObjectinstance

intheFlashPlayerwindow.MouseEvent

 

MOUSE_LEAVE:

String="mouseLeave"

 

[static]DispatchedbytheStageobjectwhenthemousepointermovesoutoftheFlashPlayerwindow

area.Event

 

MOUSE_MOVE:

String="mouseMove"

 

[static]DispatchedwhenausermovesthepointingdevicewhileitisoveranInteractiveObject.

MouseEvent

 

MOUSE_OUT:

String="mouseOut"

 

[static]DispatchedwhentheusermovesapointingdeviceawayfromanInteractiveObjectinstance.

MouseEvent

 

MOUSE_OVER:

String="mouseOver"

 

[static]DispatchedwhentheusermovesapointingdeviceoveranInteractiveObjectinstanceinthe

FlashPlayerwindow.MouseEvent

 

MOUSE_UP:

String="mouseUp"

 

[static]DispatchedwhenauserreleasesthepointingdevicebuttonoveranInteractiveObjectinstance

intheFlashPlayerwindow.MouseEvent

 

MOUSE_WHEEL:

String="mouseWheel"

//支持鼠标滚轮喽,霍霍。

 

指出一点,在我给出的例子中,使用了双击这个事件。

这个有点特殊,在使用双击事件之前,

要加上一句:

 

kingda_mc.doubleClickEnabled=true;

 

因为MovieClip对于双击事件默认是false,关闭的。

 

4.侦听器的不同。

在AS2.0中我们通常要新建一个对象做侦听器。

也可以像我的例子中用function做侦听器。

但是,

很可惜,由于AS2.0的设计缺陷,使得function中的this指向常常给我们带来困扰。

于是有了

Delegate类来解决。

而如今,AS3.0中采用了优秀的TraitsObject架构(唔,这个,就暂不解释了),使得它能记住this

的指向。

所以,兄弟们,放心大胆使用Function作为侦听器使用吧。

今天就写这么多了,主要是Flash9出来,我老人家激动了一下,一下子写了这么多东东。

希望

对大家有所帮助,希望大家狂顶支持一把,不然没动力,本系列教程会变成太监贴!

霍哈哈!

^_^

快回帖支持!

本篇主要涉及了一下AS3.0中的事件模型部分,这是很重要的。

以后会有更深入的教程来详细介

绍。

本篇的目的就是让大家使用一下Flash9和AS3,消除陌生感。

写的浅了,还请包涵。

下一篇介绍非常实用的东东,类和MovieClip的绑定,和Flash9中一大特色:

DocumentClass。

用来替代在时间轴写代码的好东东。

 

【黑羽】AS3.0教程

(2):

AS3.0的类及绑定

 

hi,鸟笼山的朋友们,这次我们开始介绍AS3.0中的类如何和库中元件绑定,和特殊的Document

 

Class设计。

总共4步:

1.建一个标准的AS3.0类(暂命名为KingdaMC,多么伟大的名字啊,简称“有名”)

2.新建一个元件,并设置它的Linkage和上面的类绑定。

3.在时间轴上写代码,用AS3.0代码创建n份“有名”。

4.删掉时间轴上代码,使用Flash9新特色DocumentClass在舞台上创造n份“有名”。

just体验一把。

(写起来才知道要讲的内容多啊,晕,打了两个小时,累了,本节专门只讲讲AS3.0的类吧,其

余的慢慢再讲)

在创建AS3.0之前,请允许我先对AS3.0类的语法和继承设计表示敬意。

与标准的完全兼容,更

好更严格的封装特性,特别是命名空间(namespace)的引入。

从今天起从AS3.0起,在OOP层面

上,AS3.0已经和Java,C#平起平坐了,甚至在某些方面(比如namespace)比java更有意思。

让俺对AS2.0老鸟说几句憋在心里的激动之语:

如果说AS2.0只是外表接近OOP标准语言,内在还是乱糟糟的AS1.0脚本语言,那么AS3.0不论是

从OOP设计级别,还是从编译器级别(如,对弱引用——weekreference——的支持)来评估

的都是标准、正宗、强大的语言。

从AS3.0起,我们ActionScript开发者可以挺起胸口,俺们是真正的行业标准级程序员。

在我继续教程之前,我要唱首歌给大家听:

 

AS3的英明,绝对不是一句两句能说清!

~~~~~~

打完,收工。

1.建立AS3.0类文件,

类文件是干嘛用的?

比如说,我们想让一个对象(Object)有很多功能,比如说这个对象是

MovieClip型的,支持拖拽,支持双击等等。

那么先在一个类文件里写清楚这些要求和实现方法,

然后就可以用这个类创建许多实例,这些实例就全具有了这些功能。

写一次,就能用很多次,

多好。

最重要的是它还可以通过继承来重用很多代码,为将来节省更多的时间。

废话少说,Ctrl+N打开“新建”窗口,选择建立“ActionScriptfile”,Ctrl+S,暂存为"KingdaMC.as"

文件。

(即“有名”的类文件)。

输入如下代码:

 

//【黑羽】ActionScript3.0系列教程

(2)

 

//http:

//www.kingda.org

//代码如下

 

//package见讲解1

 

package{

 

importflash.display.MovieClip;

//讲解2

 

importflash.events.MouseEvent;

 

//讲解3

 

publicclassKingdaMCextendsMovieClip{

 

publicfunctionKingdaMC(){

 

trace("Kingdacreated:

"+this.name);

 

this.buttonMode=true;

 

this.addEventListener(MouseEvent.CLICK,clickHandler);

 

this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownListener);

 

this.addEventListener(MouseEvent.MOUSE_UP,mouseUpListener);

 

}

 

privatefunctionclickHandler(event:

MouseEvent):

void{

 

trace("Youclickedtheball");

 

}

 

functionmouseDownListener(event:

MouseEvent):

void{

 

this.startDrag();

 

}

 

functionmouseUpListener(event:

MouseEvent):

void{

 

this.stopDrag();

 

}

 

}

 

}

 

讲解1:

AS2.0中我们使用的是全饰名称来声明类,通俗说,包括了类的路径在类名前。

AS3.0

则把路径提取出放在package这个关键字后面。

本文例子中的类文件和Fla文件在同一个目录下,

因此package后面没有什么东西。

如果类文件在org目录下的kingda目录里,那么就要写成//

ActionScript2.0

classorg.kingda.KingdaMC{

}

 

//ActionScript3.0

 

packageorg.kingda{

 

publicclassKingdaMC{}

 

}

 

你在package中可以定义好几个类,不用再写全饰名称了。

但我不推荐这样做。

一个文件一个类

比较好管理。

 

讲解2:

MovieClip类再也不像AS2.0那样是默认的全局类了。

你要使用MovieClip类一定要写这一句导

入。

讲解3:

类在AS3.0中也有public和internal的区分了。

public表示这个类可以在任何地方导入使用。

internal表示这个类只能在同一个package里面使用。

不写,就默认为internal这个新的关键字。

还有一个属性是final,表示这个类不能被继承了,继承树到此为止。

说白了,这三个属性都是用来让我们更加规范的管理类之间的关系,以便将来修改时心里有谱,

大大的方便了修改。

同时,对架构的设计能力要求更高,新手们和小项目还是多使用public吧。

越到后来你会越喜欢

internal的。

我只要看到internal和private这两个关键字,心中就无比的稳定和舒服。

想来不少

programmer和我都会有同感吧。

 

2.新建一个元件,并设置它的Linkage和上面的类绑定。

和教程第一章一样,画一个方块,按F8转成MovieClip,再在库中右键点击它,选择"linkage"

 

点击看大图。

在Class里面写上KingdaMC。

注意,id输入框已经被废止了。

因为在AS3.0中,再也没有

MovieClip.attachMovie(),MovieClip.createEmptyMovieClip(),以及MovieClip.createTextField()的

存在了。

所有舞台的可见对象都由new来创建。

比如说本例中,symbol1绑定了KingdaMC,那么如果我要在舞台上创建一个KingdaMC,只要写

 

varb1:

KingdaMC=newKingdaMC();

 

addChild(b1);

 

即可。

 

还记得以前那些乱七八糟的创建影片和组件的语法吗?

什么createClassObject(),DepthManager的

createChildAtDepth(),createClassChildAtDepth(),等等等等。

我的一个java同事刚刚学习AS时,被

上面哪些乱乱的创建函数弄得一头雾水。

统统没有了。

只有一统天下的newClassName(),多标

准哪,多舒服啊,多好学啊。

所以说,没学AS2.0直接学AS3.0绝对是新手的福气。

第二句,addChild这个很重要。

光有第一句new可不行。

那只是告诉Flash我建了一个名字叫b1的KingdaMC要显示,但还没告诉

Flash什么时候显示呢。

你什么时候打addChild(b1),那Flash才会把它显示在舞台上。

怎么样,多简单。

其实这里省略了一个this。

如果你有一个MovieClip名叫BigKingda,希望在这个BigKingda里面加

上一个KingdaMC实例,那么就要写

 

BigKingda.addChild(b1);

 

非常简单。

 

Ctrl+Enter测试,发现创建的KingdaMC,支持拖拽。

大家试着用代码多创建几个KingdaMC,比如用for循环来建个10个8个的来玩玩。

好了,累了,要歇歇了,下次讲DocumentClass。

本节代码例子参考了JendeHaan的教程,原因很简单,她选的例子很好的说明了绑定和Document

Class,黑羽做了少量的中文改动。

她原来的源码例子点此下载。

 

AS3.0教程(3):

DocumentClass特色为我们带来了什么?

 

DocumentClass,中文直译为“文档类”。

顾名思义,就是和文档绑在一起的类。

文档是啥?

就是要和这个类绑在一起的Fla文件。

什么用处?

这个玩意儿根本目的就是想把AS代码和Flash设计完全剥离。

从此,Fla里面只管设计,逻辑代码全部由外部的类来包办。

对于设计者和新手,黑羽可以打个比方,就好比三步走:

1.把Fla里面所有代码集中到第一帧,

2.再把第一帧里的代码拷贝到外部的一个as文件里。

3.再按照AS3.0的形式,把这些代码放到这个类的构造函数里去。

再根据这些个代码抽出一些类

的属性和方法就OK了。

唔,这个比喻有很多小毛病。

但比较直观,比较好理解,一步步来。

等你明白有哪些小毛病了,你已经不需要这个破比喻了。

对于程序开发者(比如c#)

DocumentClass就好比一个Entry,它的构造函数就相当于一个main函数。

教程相关例子下载:

点击下载

先来一个例子:

上次建立的KingdaMC.fla和KingdaMC.as还在吧?

 

删了?

重来一遍吧,本次要用到fla里面的加好链接类的元件,以及相关的KingdaMC类文件。

我们干两件事:

1.新建一个DocumentClass类。

2.用上之前的那个Kingda.fla,绑定DocumentClass

1.新建一个as文件,命名为KingdaMCDocumentClass,记得要和fla在同一目录下:

输入如下代码:

 

//因为在统一目录下,所以package后面没有路径

 

package{

 

importflash.display.MovieClip;

 

publicclassKingdaMCDocumentClassextendsMovieClip{

privatevartempMC:

KingdaMC;//临时变量,持有当时创建的KingdaMC的引用。

 

privatevarMAX_MCS:

int=10;//最多创建的KingdaMC数目

 

//构造函数,和类同名,在AS3.0中必须为public。

不能用private,protected或者自定义的

namespace

 

publicfunctionKingdaMCDocumentClass(){

 

vari:

int;

//新的数据类型int,只要是整数,就请用int。

效率快过Number。

 

for(i=0;i

 

tempMC=newKingdaMC();

 

//以下两行定义创建的KingdaMC形状大小随机

 

tempMC.scaleX=Math.random();

 

tempMC.scaleY=tempMC.scaleX;

//以下两行定义创建的KingdaMC位置在舞台上随机。

 

tempMC.x=Math.round(Math.random()*(this.stage.stageWidth-tempMC.width));

 

tempMC.y=Math.round(Math.random()*(this.stage.stageHeight-tempMC.height));

 

addChild(tempMC);

 

}

 

}

 

}

 

}

 

它要干的事很简单,就是用我们之前的KingdaMC类在舞台上创建十个KingdaMC实例,大小随

 

机,位置随机。

 

2.用上之前的Kingda.fla,绑定KingdaMCDocumentClass。

确保库中已有设好KingdaMC类链接的symbol。

设置方法如图:

 

先把第一帧代码全部删掉。

Ctrl+Enter测试一把。

是不是有十个MC出来啊。

然后再像图中那样加上第一帧代码,和舞台元件乐一乐。

就是不按照DocumentClass规矩干干,

呵呵。

 

那么它到底是什么?

简单的说,是一个用来取代原有散乱的时间轴代码的标准解决办法。

当一个Fla文件被编译时,DocumentClass就被主动建立了。

我们可以理解为FlashIDE偷偷加上

了如下代码:

 

//path表示DocumentClass的包,如上一节中说过的org.kingda;

//DocClass是指DocumentClass的名字

 

importpath.DocClass;

 

varTouTouDe:

DocClass=newDocClass();

 

//实例名TouTouDe是我乱写的,哈哈。

可能是默认的instance1之类的名字

 

这样的好处是所有的时间轴逻辑都剥离到DocumentClass类文件中,一旦成为一个独立的类文

件,那么很方便的可以和CVS软件结合起来。

对团队合作(Designer+Coder)来说是一大利好。

对新手和小项目来说,没什么优点和必要。

 

下面说点高级讯息和运用:

有什么坏处?

坏处大大的有。

那是相当的不习惯。

所有的舞台上的元件都别直接用属性来命名(比如说随便命名为BigKingda),不然就会出现以

下出错讯息:

 

ReferenceError:

Error#1056:

无法为KingdaMCDocumentClass创建属性BigKingda。

 

当然这个限制只在与舞台上的元件,在元件类部直接命名子元件没有

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1