当前位置:七道奇文章资讯设计学堂Flash设计
日期:2009-04-04 02:02:00  来源:本站整理

<b>Flash Actionscript知识:从 AS2 到 AS3</b>[Flash设计]

赞助商链接



  本文“<b>Flash Actionscript知识:从 AS2 到 AS3</b>[Flash设计]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
常量 操作符 参数

随着Flash CS3正式版的公布,预计很多朋友都开始从AS2迁移到AS3了.不过AS3比AS2改变的实在太多,在as2中很多办法属性在as3中并不相同,乃至消逝,并且目前帮忙文档是E文的,现下的as3底子文章也并不多,因此特开此贴,调集一些底子性的要点,尽大概以例子来阐明,让大家更快更好的往AS3迁移.文中若有错误,敬请指正.有爱好的朋友也可以一同来增添.

1、常量
先看AS2代码:var str:String;
var num:Number;
var boBoolean;
var obj:Object;
var notyped;
trace(str+newline+num+newline+boo+newline+obj+newline+notyped);
//return
undefined
undefined
undefined
undefined
undefined

再看AS3代码:

var str:String;
var num:Number;
var boBoolean;
var obj:Object;
var notyped;
trace(str+"\n"+num+"\n"+boo+"\n"+obj+"\n"+notyped);
//return
null
NaN
false
null
undefined


从上面2个例子可以清楚的看到:在as2中String、Number、Boolean、Object 的默许值都是undefined,而在as3中则辨别为null、NaN、false、null.只有未作申明的变量的默许值才是undefined.因此,在as2中一个"undefined"打天下的时代已经过期了,在as3中越发明确.同时as2中还有一个常量newline 在as3中已经撤消,由"\n"替换.别的分外阐明就是trace 办法的功效也加强了,参数个数不限,因此上面可以改成trace(str,num,boo,obj,notyped)了.

2、操作符
这里只谈论instanceof.固然as3中还保存了这个操作符,但as3中举荐用is替换它.并且is的用法更为机动.
代码:

var mystr:String="test";
var mytest:Test = new Test();//Test is extends SuperTest
trace(mytest instanceof SuperTest); //AS2 return false //AS3 return true
trace(mystr instanceof String);//AS2 return false
trace(mystr instanceof String);//AS3 return true
trace(mystr is String);//AS3 return true

此后例可以看出instanceof 在as3中的比as2中有了改变.在as2中instanceof 不会将原始范例转换为包装对象,因此在上面例子中的 String 考证中返回false,并且它对超类(如SuperTest)不起作用.而在as3中它只查抄原型链,所以在第一个trace 中会返回 true.但是as3中instanceof 并不支持接口,而is 支持.
代码:

var mytest:Test = new Test();//Test implements InterfaceTest
trace(mytest is InterfaceTest); //AS3 return true
trace(mytest instanceof InterfaceTest); //AS3 return false

至于add、eq、gt、ge、<>、and、not、or、ne、lt、le等AS1的语法在as3中通通撤消了.

3、参数
在AS3中增添了一个... (rest)这样的参数.它的作用是指明函数可以接纳肆意多个以逗号脱离的参数.AS3代码:

function testfun1(param0, param1, ...arg)
{
trace(arg is Array,arg,arg.length);
}
testfun1("param0","param1","param2","param3");
//return: true param2,param3 2

在这里... arg表示一个名为arg的数组. 当运行testfun1后,arg=["param2","param3"].还记得function有个arguments 类么,当利用了...(rest)后,argumnets 就无法获得了.但是如上例所示arg.length 一样可以利用.但是并没有近似arguments.callee 的这种办法,所以要利用...arg的时刻确保不会利用arguments.callee 的办法.

拜候掌握以及命名空间

在AS2中我们已经知道有public, private 这2个拜候掌握符,在AS3中增添了internal和protected,并且对类、办法的拜候掌握越发严峻,也越发公道和便利.别的,AS3中还增添了命名空间namespace,这样我们的拜候掌握更是机动非常.(public和private 相信大家已经熟习了,故不赘述)若有错误,敬请指正.

internal 指明类、变量、常数、办法等在包package 级别可拜候到.大家大概会问它和public与private的辨别.public只能在package{}中才能利用,但public掌握的类或办法可以在任何地方拜候到;private只能在class{}中才能利用,它掌握的类或办法仅能在呼应的class中才能拜候到.而internal可以在package{}外利用,但它只能作用于这个as文件内部.比方以下DDD.as中代码为:
package flashrek.example{
public class DDD {
function DDD() {
var e:EEE=new EEE();

}
}
}
internal var internalStr:String="internalStr";
class EEE {
function EEE() {
trace(internalStr);
}
}

那么以下代码运行后果为:import flashrek.example.DDD;
var d=new DDD();//输出:internalStr
trace(internalStr);//输出:错误Err

可以看出,类DDD可以拜候到package外的类EEE(默许就是internal,因此可以省略),而类EEE也可以拜候到变量internalStr.而DDD.as文件外的其他地方就无法拜候到EEE和internalStr了.

和internal差别,protected只能利用于类class内.它指明变量、常数、办法等在类class级别可拜候到.与private辨别在于,protected指定的办法、变量等是可以担当的,在子类中能拜候到他们.

AS3中还引入了命名空间namespace.当你有一些有特别用处的办法分布在差别的包package里,你想要这些办法在全部package里都可以利用,但你又不想把这些办法设置为public.这个时刻,namespace就可以到达你的目的.

首先你要定义一个namespace,(flashrek.as):

package flashrek.example{
public namespace flashrek= www.webjx.com;
}

然后在AAA.as文件中的代码为:
package flashrek.example{
import flashrek.example.flashrek;
public class AAA {
function AAA() {
var b:BBB=new BBB();
//flashrek::NStest();
}
flashrek function NStest() {
trace("namespace test");
}
}
}
//package外的类、命名空间不能默许且只能是internal的,且仅能为在此package内利用.
//package外是不能利用public关键字的.
internal class BBB {
function BBB() {
trace("BBB");
var c:CCC=new CCC();
}
}
class CCC {
function CCC() {
trace("CCC");
}
}

接下来再看运行后果:import flashrek.example.AAA;
import flashrek.example.flashrek;
var a=new AAA();
a.flashrek::NStest();
//输出:
BBB
CCC
namespace test

由此我们可以看出,通过a.flashrek::NStest();这样的办法,我们可以拜候到NStest办法,而其他地方是无法直接拜候到这个办法的.

在上例中大家发现,namespace很像一个类.确切有点像:)但namespace可以在package外,class内举行定义,并且也可以用public、internal等来举行拜候掌握.
比方去掉上例中的flashrek.as,而把AAA.as改成以下:

package flashrek.example{
public class AAA {
function AAA() {
var b:BBB=new BBB();
flashrek::NStest();
}
flashrek function NStest() {
trace("namespace test");
}
}
}
//package外的类、命名空间不能默许且只能是internal的,且仅能为在此package内利用.
//package外是不能利用public关键字的.
namespace flashrek= "www.flashrek.com"
internal class BBB {
function BBB() {
trace("BBB");
var c:CCC=new CCC();
}
}
class CCC {
function CCC() {
trace("CCC");
}
}

在这里namespace flashrek 定义在package 外,它只能在package 级别拜候到.因此用a.flashrek::NStest();是错误的.

全新的加载(Loading)机制

做一个loading预加载的效果相信大家都已经非常熟习了,不管是用onEnterFrame还是setInterval,还是更高级的 MovieClipLoader.可当开始用AS3的时刻,便连一个最简单的loading都无从下手了.是不是AS3中的loader越发复杂,难以掌握呢.其实不是的,在AS3中引入了一个全新的类LoaderInfo,这个类可作用于任何的可显示对象(display object),这个对象里包含了加载历程检测、加载地址、加载对象的内容、加载对象总字节数(和加载历程中的字节数)、加载对象的宽度高度等等非常多的内容(内容太多了,更多的大家可以去看帮忙).

有2种方法可以拜候LoaderInfo对象:
1)拜候flash.display.Loader对象的contentLoaderInfo属性;
2)任何一个可显示对象(display object)都有loaderInfo属性;

注意:每个SWF文档的主类的实例有loaderInfo属性,每个Loader有loaderInfo属性,同时它有一个contentLoaderInfo属性,通过这个属性你可以拜候到Loaded对象的loaderInfo.具体可以看下图:

Flash Actionscript知识:从 AS2 到 AS3

下面还是老习惯,来例子示范.首先来一个loading外部文件的例子:var request:URLRequest = new URLRequest("flashrek.swf");
var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

function loadProgress(event:ProgressEvent):void {
var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;
percentLoaded = Math.round(percentLoaded * 100);
trace("Loading: "+percentLoaded+"%");
}
function loadComplete(event:Event):void {
trace("Complete");
}

loader.load(request);
addChild(loader);

这里要注意loader的load办法只承受URLRequest对象作为参数;别的就是ProgressEvent类,对比简单,看帮忙就行了.


  以上是“<b>Flash Actionscript知识:从 AS2 到 AS3</b>[Flash设计]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .