June 28, 2006

【黑羽】ActionScript 3.0系列教程(1):与Flash9先来一次亲密接触!

ActionScript3天地会公测中...

(如蒙转载,请留下我的Blog链接:www.kingda.org, thx)

Flash Professional 9 ActionScript 3.0 Preview 版本今天发布了,意味着从此我们从此不仅仅只能使用Flex 2来使用AS3.0,更可以使用我们一直很熟悉的Flash IDE来进行AS3.0开发了。

与Flex 2不同,Flash 9 alpha(即上面的Flash Professional 9 ActionScript 3.0 Preview )允许我们创建基于时间轴的ActionScript 3.0的Fla文档,而不是基于State的MXML文档。 在Flash 9 alpha 里,我们和以前一样可以在舞台上直接手绘矢量图,创建元件,添加动画,等等。

我黑羽是急性子,先跳开一些特色的介绍,单刀直入,马上来个实例。边讲解边说说Flash 9的特点。
1.gif
点击看大图,清楚点。

为了照顾新手xdjm们,看图说话一把。老鸟略过勿看,省得嫌我罗嗦。呵呵。
新建一个fla,随便画一个方块什么的,双击选中按F8转换成MovieClip。在属性面板中命名为kingda_mc。和以前一模一样。
再新建一层,命名为actions,这是个好习惯,要保持。选中第一帧,按F9打开动作面板,写入如下代码。
Control+Enter,在测试窗口中,双击那个方块,就会有trace信息显示出来。


//【黑羽】ActionScript 3.0系列教程(1)
//http://www.kingda.org
kingda_mc.doubleClickEnabled = true;
kingda_mc.addEventListener(MouseEvent.DOUBLE_CLICK, clickHandler);
function clickHandler(event:MouseEvent):void {
trace("哈哈,你双击我了");
}
//直接支持双击了, 兄弟们,爽不爽 ^_^

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

1. AS2.0中,MovieClip是不可以加侦听器地,但AS3.0中,却可以了。讲点深入的东东给老鸟听,所有AS3.0中能被我们看见的对象,其祖宗都是DisplayObject类。标准说法是都间接或直接的继承于DisplayObject类。而这个DisplayObject又是EventDispatcher的儿子。所以,我们就有了这个推论:
AS3.0中所有能被我们看到的东西,都能发送事件和加侦听器。 完全适用于Event Model.
爽吧, 我是爽歪了。AS2.0中为了解决这个麻烦我还自己编了一个代理发送事件类EventSender。省了不少事儿,而现在连这个也不用了,霍哈哈。

2.AS3.0中要让MovieClip在接受click事件,rollover事件能够像Button一样,鼠标放上去显示手型,那么一定要加上一句:
kingda_mc.buttonMode = true;
小事一桩,一笔带过。

3.AS3.0中的事件模型和AS2.0大不一样了。
简而言之,就是“规范”。不再直接使用字符串来定义事件名称了。又要讲深一点了,都是使用了新的const型变量来定义事件字符串名称,一旦定义,不能再更改。


public static const MOVE:String = "move";

极大的避免了我们因为手误,打错字符串,而花上一个下午找bug。使用了这种模式,我们一旦打错,编译器立刻会发现并告诉我们。多好。
给出一些鼠标事件列表,大家可以替换上面源码中的事件类型,自己试着玩儿。
如,你可以换成MouseEvent.MOUSE_OVER就变成了以前的onRollOver效果。

CLICK : String = "click"
[static] Dispatched when a user presses and releases the main button of the user's pointing device over the same InteractiveObject. MouseEvent
DOUBLE_CLICK : String = "doubleClick"
[static] Dispatched when a user presses and releases the main button of a pointing device twice in rapid succession over the same InteractiveObject when that object's doubleClickEnabled flag is set to true. MouseEvent
MOUSE_DOWN : String = "mouseDown"
[static] Dispatched when a user presses the pointing device button over an InteractiveObject instance in the Flash Player window. MouseEvent
MOUSE_LEAVE : String = "mouseLeave"
[static] Dispatched by the Stage object when the mouse pointer moves out of the Flash Player window area. Event
MOUSE_MOVE : String = "mouseMove"
[static] Dispatched when a user moves the pointing device while it is over an InteractiveObject. MouseEvent
MOUSE_OUT : String = "mouseOut"
[static] Dispatched when the user moves a pointing device away from an InteractiveObject instance. MouseEvent
MOUSE_OVER : String = "mouseOver"
[static] Dispatched when the user moves a pointing device over an InteractiveObject instance in the Flash Player window. MouseEvent
MOUSE_UP : String = "mouseUp"
[static] Dispatched when a user releases the pointing device button over an InteractiveObject instance in the Flash Player window. MouseEvent
MOUSE_WHEEL : String = "mouseWheel"
//支持鼠标滚轮喽,霍霍。

指出一点,在我给出的例子中,使用了双击这个事件。这个有点特殊,在使用双击事件之前,要加上一句:

kingda_mc.doubleClickEnabled = true;

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


4.侦听器的不同。
在AS2.0中我们通常要新建一个对象做侦听器。也可以像我的例子中用function做侦听器。但是,很可惜,由于AS2.0的设计缺陷,使得function中的this指向常常给我们带来困扰。于是有了Delegate类来解决。
而如今,AS3.0中采用了优秀的Traits Object架构(唔,这个,就暂不解释了),使得它能记住this的指向。所以,兄弟们,放心大胆使用Function作为侦听器使用吧。

今天就写这么多了,主要是Flash 9出来,我老人家激动了一下,一下子写了这么多东东。希望对大家有所帮助,希望大家狂顶支持一把,不然没动力,本系列教程会变成太监贴!霍哈哈! ^_^ 快回帖支持!

本篇主要涉及了一下AS3.0中的事件模型部分,这是很重要的。以后会有更深入的教程来详细介绍。本篇的目的就是让大家使用一下Flash 9和AS3,消除陌生感。写的浅了,还请包涵。
下一篇介绍非常实用的东东,类和MovieClip的绑定,和Flash 9中一大特色:Document Class。用来替代在时间轴写代码的好东东。tongue.giftongue.giftongue.gif

P.S:本教程受Creative Commons License.协议保护,未经作者同意,不得用于商业用途。

广告:哈哈,现在刚好是阿里妈妈推广期哦,你是站长吗?推荐注册阿里妈妈赚广告费

TrackBack

TrackBack URL for this entry:
http://www.kingda.org/mt/mt-tb.cgi/67

Comments (48)

N神:

发现有人在发教程啊,好啊,关注中,我还没下f9,明天回公司就下。
关于第3点。
只是给类定义一个静态恒量表示那个string。直接用字符串应该也还可以吧?明天试试
+个友情链接吧,你的加好了
www.nshen.net

谢谢啦~~~~支持~~~~~AS3真是爽死了~~~

zjwps:

支持一下

N神,你的链接已经加上去了。
^_^

直接用String 肯定可以的。用const只是为了更好管理。

好期待滴說...

写的不错,希望继续看到好教程,可别马虎,顺便也做个友情链接吧.呵呵

clingingboy, 链接加上了 ^_^

Lancelot:

写的真好,清晰易懂,希望以后的教程都能采用这种AS3和AS2之间对比的方法来写

Fang Yidong:

Hi,你好.
问一个和本文无关的问题:
我是Flex初学者.
Flex Data Service很贵,如果只用Flex做界面,使用自己的数据服务,可行吗?谢谢.
如果能把回复email给我,更感谢:-)

to Fang Yidong:
当然可以,我压根就没准备学Flex Data Service。一句话,贵,且不开源。没意思。
用jsp或者php来连接数据库。挺好的。
或者像我们公司一样,采用Webservices,和国际技术标准接轨。

minlab:

黑羽加油....一直来看你的blog...

写的暴好...... :)

minlab:

黑羽加油....一直来看你的blog...

写的暴好...... :)

ccbwx:

非常好,加油干!!
顶一个!

黑羽,谢谢你的回答.
现在我有另外一个问题:如果我用Flex做界面而且想使用google adsense,你认为可行吗?

BTW:
我是Danger的朋友,如果可以的话,请加我的msn: fangyidong@hotmail.com,以便我可以和你讨论讨论技术问题,谢谢 :-) (我做Java比较多,做过的东西包括JSON.simple[http://www.json.org/java/simple.txt].最近我想做一个Flash项目,我还不太熟悉Flash).

hi, Fang Yidong
我觉得理论上是可行的。你在google上搜一下 这篇文章"Google AdSense 全面解析"
里面有解析后的广告链接内容。这样你就可以嵌进Flex程序中使用了。
好像Flex是不能支持Google adsense showad.js生成的iFrame的,因此不能直接使用它的js。
你的msn我回家后就加上。 ^^
java高手学AS3.0很快的。

hi, Fang Yidong
我觉得理论上是可行的。你在google上搜一下 这篇文章"Google AdSense 全面解析"
里面有解析后的广告链接内容。这样你就可以嵌进Flex程序中使用了。
好像Flex是不能支持Google adsense showad.js生成的iFrame的,因此不能直接使用它的js。
你的msn我回家后就加上。 ^^
java高手学AS3.0很快的。

谢谢.
我研究下.
BTW:
如果你能做一个demo出来,会很酷,估计不少人想用呢,呵呵.

iwww:

期待,这下开发好多了

我现在弄Blog的新主题呢 ^ ^

我现在弄Blog的新主题呢 ^ ^

很cool的教學,我也在研究flash9中

好样的,不错!
正在用as3.0编写应用程序
演示地址:http://www.odao.com:8080/odaocrm

HUPEIKANG1:

支持哈~~~谢谢 黑羽大哥了~~嘎嘎~~

烂李子:

to chin21: 你的演示程序怎么报异常了?错误细节:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]将数据类型 nvarchar 转换为 int 时出错。呵呵

slanb:

谢谢!辛苦了!支持一下!~~~

swallow.sz:

非常感谢黑羽的教程,我现在正要用flash 9 alpha 开发一个金融图表的工具,就像yahoo finance chart那样的,http://finance.yahoo.com/charts#chart1:symbol=ibm;range=1y;indicator=volume;charttype=line;crosshair=on;logscale=off;source=undefined

感觉还是有不少难度,正在学习flash.在这先谢谢兄弟了,你的教程对我帮助很大。

yqd:

请问MOUSE_LEAVE怎么用。换掉以后提示出错。把MouseEvent改成Event不报错了。但没反应。。谢谢。

我现在做2.0 也不是了解的很透彻
想转做3.0 可以推荐两本好书 或者 有什么高见:P !!
谢谢咯

学习中...

Wanda:

刚开始用AS 3.0,找到这里。
关注中,
并顶……

loongman:

找了许多天,终于找到了一个讲As3的站点。但是很多看不懂呀,能不能再通俗点,再再通俗点呢?我很想学的。

吴彩婷:

我是学FLEX的新手,感觉头很大,能不能加我的MSN tingg159@hotmail.com谢谢!

我是一个19岁的大一学生,学了AS2.0几年了,但AS3.0现在才开始学.
看了你的教程, 我感觉自己很渺小........

我是一个19岁的大一学生,学了AS2.0几年了,但AS3.0现在才开始学.
看了你的教程, 我感觉自己很渺小........

我是一个19岁的大一学生,学了AS2.0几年了,但AS3.0现在才开始学.
看了你的教程, 我感觉自己很渺小........

whcbk:

正在学习FLASH,受用,关注

都是高手,小弟出来炸道,望各位高手多多指教.以后就跟你们混了

bbkx:

你好,昨天才装上as3.

as2学了一年感觉刚刚入门,看着as3现在找不到北了。555555555

qiudie:

谢谢你给大家写这麽好的教程,我对编程不是很懂,以后还要向你多请教呢,希望不吝赐教呀

blueken:

哈哈.给黑羽点支持.
另外用LEAVE真的会报错.

1119: 访问可能未定义的属性 MOUSE_LEAVE (通过 static 类型 Class 引用)。

Lay:

请问,用Flash Player 8.0打开Flash 9生成的swf是不是使用不了AS3.0的效果?
我按这篇文章的方法做了一次,在Flash 9中Ctrl+Enter能成功,但是单独打开swf就不行了。

谢谢,很好的教程呀。 可是我新建的AS2文件,搞了半天就是代码错误,我汗自己一个 :)

鼠标滚轮,可以判断向上滚或向下滚吗?

Magcianlu:

我现在正在学AS2,可是AS3都出来了,请教大哥,是不是应该跟着时代走,学AS3了,天天等老师答复!

Magcianlu:

看了几章教程,确实不错,as3比as2好用些,能介词一些有说服力的书,非常感谢!!!顶起

晕,这里这么多问问题的啊,黒羽的去天地会问吧,大家都在那里http://www.actionscript3.cn/bbs/

马宙:

真的很好,以后会多多的来这转转

留下高见,发表评论

个人信息不会外泄,请放心填写。

姓名和Email必填。

发表评论后,请耐心等待,不要频繁刷新。提交完成后,刷新一下本页即可看到您的评论。^_^

请输入验证字符"t" :
文字广告:你是站长吗?注册阿里妈妈赚广告费

最近发表

归档

全部
Creative Commons License
此 Blog 中的日记
遵循以下授权:
Creative Commons
(创作共用) 授权
.
Google PageRank
本站被Adobe官方MXNA新闻聚合器收录
本站被蓝色理想BXNA收录