(如蒙转载,请留下我的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的特点。
![]()
点击看大图,清楚点。
为了照顾新手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。用来替代在时间轴写代码的好东东。![]()
![]()
![]()
P.S:本教程受Creative Commons License.协议保护,未经作者同意,不得用于商业用途。







Comments (48)
发现有人在发教程啊,好啊,关注中,我还没下f9,明天回公司就下。
关于第3点。
只是给类定义一个静态恒量表示那个string。直接用字符串应该也还可以吧?明天试试
+个友情链接吧,你的加好了
www.nshen.net
Posted by N神 | June 28, 2006 11:28 PM
Posted on June 28, 2006 23:28
谢谢啦~~~~支持~~~~~AS3真是爽死了~~~
Posted by BlueF | June 29, 2006 1:18 AM
Posted on June 29, 2006 01:18
支持一下
Posted by zjwps | June 29, 2006 9:35 AM
Posted on June 29, 2006 09:35
N神,你的链接已经加上去了。
^_^
直接用String 肯定可以的。用const只是为了更好管理。
Posted by 黑羽 | June 29, 2006 9:35 AM
Posted on June 29, 2006 09:35
好期待滴說...
Posted by 木頭 | June 29, 2006 2:22 PM
Posted on June 29, 2006 14:22
写的不错,希望继续看到好教程,可别马虎,顺便也做个友情链接吧.呵呵
Posted by clingingboy | June 29, 2006 3:01 PM
Posted on June 29, 2006 15:01
-_-
Posted by clingingboy | June 29, 2006 3:02 PM
Posted on June 29, 2006 15:02
clingingboy, 链接加上了 ^_^
Posted by 黑羽 | June 29, 2006 4:09 PM
Posted on June 29, 2006 16:09
写的真好,清晰易懂,希望以后的教程都能采用这种AS3和AS2之间对比的方法来写
Posted by Lancelot | June 29, 2006 5:13 PM
Posted on June 29, 2006 17:13
Hi,你好.
问一个和本文无关的问题:
我是Flex初学者.
Flex Data Service很贵,如果只用Flex做界面,使用自己的数据服务,可行吗?谢谢.
如果能把回复email给我,更感谢:-)
Posted by Fang Yidong | June 29, 2006 5:56 PM
Posted on June 29, 2006 17:56
to Fang Yidong:
当然可以,我压根就没准备学Flex Data Service。一句话,贵,且不开源。没意思。
用jsp或者php来连接数据库。挺好的。
或者像我们公司一样,采用Webservices,和国际技术标准接轨。
Posted by 黑羽 | June 29, 2006 6:29 PM
Posted on June 29, 2006 18:29
黑羽加油....一直来看你的blog...
写的暴好...... :)
Posted by minlab | June 30, 2006 10:36 AM
Posted on June 30, 2006 10:36
黑羽加油....一直来看你的blog...
写的暴好...... :)
Posted by minlab | June 30, 2006 10:37 AM
Posted on June 30, 2006 10:37
非常好,加油干!!
顶一个!
Posted by ccbwx | June 30, 2006 11:46 AM
Posted on June 30, 2006 11:46
黑羽,谢谢你的回答.
现在我有另外一个问题:如果我用Flex做界面而且想使用google adsense,你认为可行吗?
BTW:
我是Danger的朋友,如果可以的话,请加我的msn: fangyidong@hotmail.com,以便我可以和你讨论讨论技术问题,谢谢 :-) (我做Java比较多,做过的东西包括JSON.simple[http://www.json.org/java/simple.txt].最近我想做一个Flash项目,我还不太熟悉Flash).
Posted by Fang Yidong | June 30, 2006 1:23 PM
Posted on June 30, 2006 13:23
hi, Fang Yidong
我觉得理论上是可行的。你在google上搜一下 这篇文章"Google AdSense 全面解析"
里面有解析后的广告链接内容。这样你就可以嵌进Flex程序中使用了。
好像Flex是不能支持Google adsense showad.js生成的iFrame的,因此不能直接使用它的js。
你的msn我回家后就加上。 ^^
java高手学AS3.0很快的。
Posted by 黑羽 | June 30, 2006 2:18 PM
Posted on June 30, 2006 14:18
hi, Fang Yidong
我觉得理论上是可行的。你在google上搜一下 这篇文章"Google AdSense 全面解析"
里面有解析后的广告链接内容。这样你就可以嵌进Flex程序中使用了。
好像Flex是不能支持Google adsense showad.js生成的iFrame的,因此不能直接使用它的js。
你的msn我回家后就加上。 ^^
java高手学AS3.0很快的。
Posted by 黑羽 | June 30, 2006 2:20 PM
Posted on June 30, 2006 14:20
谢谢.
我研究下.
BTW:
如果你能做一个demo出来,会很酷,估计不少人想用呢,呵呵.
Posted by Fang Yidong | June 30, 2006 2:31 PM
Posted on June 30, 2006 14:31
期待,这下开发好多了
Posted by iwww | July 2, 2006 7:58 AM
Posted on July 2, 2006 07:58
我现在弄Blog的新主题呢 ^ ^
Posted by 黑羽 | July 4, 2006 12:20 AM
Posted on July 4, 2006 00:20
我现在弄Blog的新主题呢 ^ ^
Posted by 黑羽 | July 4, 2006 12:21 AM
Posted on July 4, 2006 00:21
很cool的教學,我也在研究flash9中
Posted by milkmidi | July 11, 2006 3:11 PM
Posted on July 11, 2006 15:11
好样的,不错!
正在用as3.0编写应用程序
演示地址:http://www.odao.com:8080/odaocrm
Posted by china21 | September 10, 2006 10:30 PM
Posted on September 10, 2006 22:30
支持哈~~~谢谢 黑羽大哥了~~嘎嘎~~
Posted by HUPEIKANG1 | February 19, 2007 9:04 PM
Posted on February 19, 2007 21:04
to chin21: 你的演示程序怎么报异常了?错误细节:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]将数据类型 nvarchar 转换为 int 时出错。呵呵
Posted by 烂李子 | February 27, 2007 3:46 PM
Posted on February 27, 2007 15:46
谢谢!辛苦了!支持一下!~~~
Posted by slanb | March 7, 2007 2:03 PM
Posted on March 7, 2007 14:03
非常感谢黑羽的教程,我现在正要用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.在这先谢谢兄弟了,你的教程对我帮助很大。
Posted by swallow.sz | March 28, 2007 4:58 PM
Posted on March 28, 2007 16:58
请问MOUSE_LEAVE怎么用。换掉以后提示出错。把MouseEvent改成Event不报错了。但没反应。。谢谢。
Posted by yqd | April 19, 2007 4:11 PM
Posted on April 19, 2007 16:11
我现在做2.0 也不是了解的很透彻
想转做3.0 可以推荐两本好书 或者 有什么高见:P !!
谢谢咯
Posted by kinfor | April 19, 2007 4:15 PM
Posted on April 19, 2007 16:15
学习中...
Posted by buildcold | April 30, 2007 12:06 AM
Posted on April 30, 2007 00:06
刚开始用AS 3.0,找到这里。
关注中,
并顶……
Posted by Wanda | May 7, 2007 3:13 PM
Posted on May 7, 2007 15:13
找了许多天,终于找到了一个讲As3的站点。但是很多看不懂呀,能不能再通俗点,再再通俗点呢?我很想学的。
Posted by loongman | May 8, 2007 2:54 PM
Posted on May 8, 2007 14:54
我是学FLEX的新手,感觉头很大,能不能加我的MSN tingg159@hotmail.com谢谢!
Posted by 吴彩婷 | May 15, 2007 1:56 PM
Posted on May 15, 2007 13:56
我是一个19岁的大一学生,学了AS2.0几年了,但AS3.0现在才开始学.
看了你的教程, 我感觉自己很渺小........
Posted by [ YoungBoy ] | May 19, 2007 4:16 PM
Posted on May 19, 2007 16:16
我是一个19岁的大一学生,学了AS2.0几年了,但AS3.0现在才开始学.
看了你的教程, 我感觉自己很渺小........
Posted by [ YoungBoy ] | May 19, 2007 4:16 PM
Posted on May 19, 2007 16:16
我是一个19岁的大一学生,学了AS2.0几年了,但AS3.0现在才开始学.
看了你的教程, 我感觉自己很渺小........
Posted by [ YoungBoy ] | May 19, 2007 4:16 PM
Posted on May 19, 2007 16:16
正在学习FLASH,受用,关注
Posted by whcbk | May 21, 2007 9:46 PM
Posted on May 21, 2007 21:46
顶
都是高手,小弟出来炸道,望各位高手多多指教.以后就跟你们混了
Posted by 大米 | July 4, 2007 10:56 PM
Posted on July 4, 2007 22:56
你好,昨天才装上as3.
as2学了一年感觉刚刚入门,看着as3现在找不到北了。555555555
Posted by bbkx | August 6, 2007 12:18 PM
Posted on August 6, 2007 12:18
谢谢你给大家写这麽好的教程,我对编程不是很懂,以后还要向你多请教呢,希望不吝赐教呀
Posted by qiudie | August 8, 2007 9:43 AM
Posted on August 8, 2007 09:43
哈哈.给黑羽点支持.
另外用LEAVE真的会报错.
1119: 访问可能未定义的属性 MOUSE_LEAVE (通过 static 类型 Class 引用)。
Posted by blueken | September 3, 2007 1:18 PM
Posted on September 3, 2007 13:18
请问,用Flash Player 8.0打开Flash 9生成的swf是不是使用不了AS3.0的效果?
我按这篇文章的方法做了一次,在Flash 9中Ctrl+Enter能成功,但是单独打开swf就不行了。
Posted by Lay | September 7, 2007 5:06 PM
Posted on September 7, 2007 17:06
谢谢,很好的教程呀。 可是我新建的AS2文件,搞了半天就是代码错误,我汗自己一个 :)
Posted by robin | September 30, 2007 2:06 PM
Posted on September 30, 2007 14:06
鼠标滚轮,可以判断向上滚或向下滚吗?
Posted by nighelf | October 8, 2007 9:48 AM
Posted on October 8, 2007 09:48
我现在正在学AS2,可是AS3都出来了,请教大哥,是不是应该跟着时代走,学AS3了,天天等老师答复!
Posted by Magcianlu | October 23, 2007 8:09 PM
Posted on October 23, 2007 20:09
看了几章教程,确实不错,as3比as2好用些,能介词一些有说服力的书,非常感谢!!!顶起
Posted by Magcianlu | October 23, 2007 8:59 PM
Posted on October 23, 2007 20:59
晕,这里这么多问问题的啊,黒羽的去天地会问吧,大家都在那里http://www.actionscript3.cn/bbs/
Posted by 清水 | October 24, 2007 12:30 PM
Posted on October 24, 2007 12:30
真的很好,以后会多多的来这转转
Posted by 马宙 | November 4, 2007 10:13 AM
Posted on November 4, 2007 10:13