as3教程flashActionScrip3.docx
- 文档编号:23657561
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:123
- 大小:673.37KB
as3教程flashActionScrip3.docx
《as3教程flashActionScrip3.docx》由会员分享,可在线阅读,更多相关《as3教程flashActionScrip3.docx(123页珍藏版)》请在冰豆网上搜索。
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。 当然这个限制只在与舞台上的元件,在元件类部直接命名子元件没有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- as3 教程 flashActionScrip3