FlashActionScript(15)as2.0与as3.0区别

FlashActionScript(15)as2.0与as3.0区别
学习AS3.0已有⼀段时间了,想把⾃已对AS3的⼀些认识和⼤家分享⼀下。主要想说说AS3与AS2的不同之处,没有什么逻辑性,想到什么就写点什么,因此,它不适合AS⾼⼿们阅读。本⽂将⼒求⽤最直⽩的语⾔,尽量不⽤那些艰涩难懂的名词和术语。
⼀、在什么地⽅写代码
失望,以为要说点啥,原来是这么⼩⼉科的问题。没办法,我说过了,本⽂不适合AS⾼⼿阅读的。为了更好地理解,我们还是⽤例⼦来说明。现在,就让我们⼀起来回顾⼀下,在AS2中我们都会把代码写在什么地⽅。我们在AS2中建⼀新⽂档,新建⼀个影⽚剪辑元件取名为bt,元件很简单,随便画⼀个⽅块就⾏,你说我偏要画⼀个园,那当然随你⾼兴罗,我没意见。然后,在场景中,⽤⽂字⼯具建⼀⽂本框,设为动态⽂本框,实例名称命名为:text1,将元件bt从库中拖到舞台上,实例名称命名为:bt_mc.现在写代码,想⼀想,代码写在什么地⽅,我们来做下⾯三个测试
测试⼀:在帧动作中,直接写代码,点中第⼀层,第⼀帧,然后打开动作⾯板,在上⾯写到:
< = "代码执⾏了“;
测试影⽚,OK,我们看到了”代码执⾏了“这⼏个字。
测试⼆:还在帧动作中写代码,将代码改为:
Press = function() {
< = "代码执⾏了“;
}
测试影⽚,当我们点击,元件bt_mc时,⼜看到了“代码执⾏了”⼏个字。
测试三:好象还可以把代码写到元件上,清除帧动作中的代码,点中bt_mc,打开动作⾯板,写下如下代码:
on(press){
_ = "代码执⾏了“;
}
测试影⽚,点击bt_mc⼜看到了“代码执⾏了”⼏个字。
它怎么⽼是执⾏了呢,真是的。
下⾯我们在AS3中,作相同的测试:
测试⼀、在测试影⽚时,我们还是看到了那⼏个字,它都⼜执⾏了。
那AS3和AS2不是⼀样的?你还写个啥⼦劲?是哈,整了半天AS3和AS2整成⼀样的了。在“不到黄河⼼不死”的精神⿎舞下,我们还是把剩下的两个测试做完。
测试⼆、在测试影⽚时,哈哈,出错了,为我们出错喝彩吧(有病!),出错了,说明AS3与AS2还是不⼀样,那么本⽂就还可以写下去了。
测试三、当我们点中bt_mc,然后打开动作⾯板时,我们看到的是:
“⽆法将动作应⽤于当前所选内容”
真是过分,它连测试的机会都不给你。
好了,测试做完了,所谓实践出真知,通过测试,我们可以得出如下结论:
在AS2中,我们可以把代码写在帧动作中,也可以写在影⽚剪辑、按钮等元件上。
在AS3中,我们只能把代码写在帧动作中。(当然也可以写在.as等外部⽂件中,然后将它导⼊进来)。
⼆、AS3中的事件侦听
看到这⾥,聪明的你⼀定会说,在AS3中做上⾯的测试⼆时,代码是写在帧动作中的啊,为什么会出错呢?是啊,正因为有你的聪明,才使本⽂可以继续写下去啊。
在AS2中我们在让程序响应⼀个事件,⽐如⿏标单击,我们可以在帧动作中这样写:
事件对象.onPress = function() { 语句}
在AS3中,就不能这样写了,所以上⾯的测试⼆就出错了。
在AS3中,你必须先声明⼀个函数,其中包含你要执⾏的语句,然后⽤事件对象来侦听事件并调⽤这个函数,这将⽤到事件侦听语句:addEventListener
⽆论何时编写事件侦听器代码,该代码都会采⽤以下基本结构(以粗体显⽰的元素是占位符,您将针对具体情况对其进⾏填写): function eventResponse(eventObject:EventType):void
(函数名称) (事件类型)
{
// 此处是为响应事件⽽执⾏的动作。
}
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);
(事件对象) (事件类型.名称 函数名称)
我想还是⽤测试⼆,来说明好理解⼀些:
在AS3中,将测试⼆中帧动作代码改为:
function test(event:MouseEvent):void //先声明⼀个函数test,其中包含了要执⾏的代码。
{
< = "代码执⾏了";
}
bt_mc.addEventListener(MouseEvent.CLICK,test) //然后,⽤bt_mc元件来侦听事件,并调⽤test
测试影⽚,哈哈,代码它终于执⾏了。
上述代码中的事件类型是:⿏标事件(MouseEvent),事件名称是:单击(CLICK)。
你⼜要说话了,“这不是更⿇烦吗?”,是有点⿇烦哈,不过据说是更规范,更利于代码维护,不过不管你愿不愿意,你要⽤AS3你就得这么写。
三、添加显⽰对象
这⼀节,来说说显⽰对象。显⽰对象?啥玩眼,你不是说不⽤专业术语吗?这个简单,你在舞台上能看到的东西就叫显⽰对象。你说显⽰对象是咋个到舞台上去的呢?你傻哦,当然是放上去的啰。那它是咋个放上去的呢?当然是⽤⿏标放上去⿇。那只有⽤⿏标才能放上去吗?那不⼀定,我还以⽤attachMovie从库⾥头加载⼀个,我也可以⽤duplicateMovieClip复制⼀个,⾼兴了,我还可以⽤代码画⼀个,我还可以⽤loadMovie导⼊⼀个外部⽂件。你耐我何?真的吗?你敢不敢试⼀下吗?试就试,谁怕谁?
先试attachMovie:在AS3中在帧动作中写如下代码:
attachMovie ("bt","bt1",1)
测试影⽚,出错了。我们知道,这在AS2中是不会出错的,⽽且会将库中的“bt"元件,加载⼀个到舞台上。
还在那写⽂章,要加载库⾥的元件,必须要在元件的链接属性中为元件指定标识符,这⼀步你都不晓得?是哈,咋把这⼀步给忘了,赶紧去设置,在库中,bt原件上单击右键,点链接,选中“ActionSpript导出“,再看”标⽰符“那⼀栏,不能⽤!你能⼲,你来设⿇。
其实,在AS3中根本就没有attachMovie这⼀说。
现在试⼀下:duplicateMovieClip:将代码改为:
duplicateMovieClip ("bt_mc","bt1",1)
bt1._x = 300;
测试影⽚,⼜出错了。同样的,AS3中也没有duplicateMovieClip这⼀说。
画⼀个?画⿇:将代码改为:
1. createEmptyMovieClip("bt1",0);
2. with (bt1) {
3. beginFill(0xFF0000);
4. moveTo(100,0);
5. lineTo(200,100);
6. lineTo(0,100);
7. lineTo(100,0)
8. endFill();
9. }
测试影⽚,还是出错了。⽽这⼏句代码在AS2中会画出⼀个红⾊的三⾓形。
在AS3中,加载⼀个显⽰对象,必须⽤new关键字来构造,要在舞台上看到它,还必须⽤addChild()将它加到显⽰列表中才⾏。
还是来做个实例吧,我
第+⼀课d件w⽹#们将库中的bt元件,加载到舞台上:
⾸先我们在库中,在bt元件上,点右键-链接,选中,“为ActionScript导出“,这时”类“和”基类“两栏均变为可⽤。这样,就在Flash.display.MovieClip类中创建了⼀个”bt"类。点击确定,在接下弹出的对话框中,再点确定,就⾏了。
现在我们可以在代码中加载bt了
var bt1:bt = new(bt); //声明⼀个新的bt类的实例,并⽤new()来构造它
this.addChild(bt1); //将bt1载到舞台
bt1.x =200;
bt1.y=300; //设置bt1的x,y值,注意在AS3中,x和y前⽽没有下划线了。
测试影⽚,bt已加载到舞台上了。
下⾯我们在AS3中画⼀个,代码这样写:
var bt1:MovieClip = new(MovieClip); //声明⼀个新的mc类bt1,并⽤new来构造它
1. aphics.beginFill(0x00FF00);//以下的代码是⽤graphics画三⾓形。
2. veTo(100,200);
3. aphics.lineTo(200,100);
4. aphics.lineTo(0,100);
5. aphics.lineTo(100,200);
6. this.addChild(bt1);
在AS3中,除了MovieClip类外,还可以⽤Shape、Sprite 类来绘图或加载显⽰对象,⽽且还要更节约系统资源⼀些。
加载外部显⽰对象,在AS3中,利⽤Loader类来加载外部对象;同样的也要先声明⼀个Loader类实例:
1. var loadpict:Loader = new(Loader);
2. var pictURLReq:URLRequest = new URLRequest(pictURL);//pictURL为外部⽂件的路径
3. loadpict.load(pictURLReq);
4. this.addChild(loadpict);
好了,暂时写这么多,如果想起了什么,再补充。

本文发布于:2024-09-20 17:51:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/89140.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:代码   测试   元件   事件   舞台
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议