Browse > Home > Archive: 05月 2007

| Subcribe via RSS

AIR应用程序描述符(AIR application descriptor)介绍

05月 19th, 2007 | No Comments , 151 views | Posted by flashlizi in Adobe AIR

AIR应用程序描述符(AIR application descriptor)文件,即application.xml。它包含了整个程序的全部属性,名称、版本、版权等等。描述符文件名可以是任意的,比如flashrek.xml,但是当你用flex builder或者ADT打包编译成AIR文件的时候,它们会把它重命名为application.xml。

下面是一个描述符文件的例子(application.xml):
[code]<?xml version="1.0" encoding="utf-8" ?>
<application appId="com.flashrek.air.examples.HelloAIR" version="1.0"
xmlns="http://ns.adobe.com/air/application/1.0.M4">
<name>AIR Hello</name>
<description>
This is the Hello AIR sample file.
</description>
<title>Hello AIR -- www.flashrek.com</title>
<copyright>Copyright © 2007</copyright>
<rootContent systemChrome="standard"
transparent="true"
visible="true"
width="640"
height="480">
HelloAIR.swf
</rootContent>
<installFolder>flashrek/Examples</installFolder>
<icon>
<image16×16>icons/smallIcon.png</image16×16>
<image32×32>icons/mediumIcon.jpg</image32×32>
<image48×48>icons/bigIcon.gif</image48×48>
<image128×128>icons/biggestIcon.png</image128×128>
</icon>
</application>[/code]

下面来介绍一下ARI程序的一些基本属性。
1、appId:唯一的程序标识符,在重新安装或更新的时候,会据此来判断是否安装过此AIR。它可使用的字符限制在这几种字符:[0-9][a-z][A-Z][.][-] 。
2、version:用来指定程序的版本。如:"1.0", ".4", "0.5", "4.9", "1.3.4a"。
3、xmlns:AIR的名字空间(namespace)。它必须根据每次AIR的版本更新来进行相应的改变。
4、name:定义程序的名称,它会出现在程序的窗口标题和windows的开始菜单中,必需元素。
5、title:显示在AIR程序的安装程序中的标题,可选元素。
6、description:显示在AIR程序的安装程序中的介绍,可选元素。
7、copyright:定义AIR程序的版权信息,可选元素。
8、installFolder:指定AIR程序在默认安装目录下的子目录,可选元素。
9、rootContent:指定AIR程序的启动文件,它可以是一个swf或html文件,必需元素。
10、systemChrome:指定AIR程序的外观。它有2个值:standard,显示系统程序外观,如边框、标题等,且不包含透明值;none,不显示系统程序外观,这样可以定制出自己的程序外观。
11、transparent:指定程序是否支持透明模式(alpha blending)。设置为true后,程序会增加内存消耗,可能造成程序窗口绘制速度变慢,并且systemChrome必须设置为none。
12、visible:设置为false可以让程序主窗口在第一次创建的时候就隐藏。你可以让你的主窗口在初始化的时候隐藏,在程序代码中设置窗口的大小和位置后,你可以在代码中通过设置stage.window.visible为true来重新显示窗口。
13、width和height:指定程序主窗口的宽度和高度。如果你不设置它们,主窗口的宽高将由rootContent中指定的swf文件的宽高来决定,如果rootContent中指定的是html文件,则取决于操作系统。
14、icon:指定程序使用的图标文件,可选元素。文件路径与程序的根目录相关,支持PNG, GIF, and JPEG等格式图片文件,并且必须与指定的尺寸相符,比如image48×48标签下的icon尺寸必须是48×48的。但是,你可以不全部指定所有尺寸的图标。比如只指定image128×128的icon,系统则会自动从最靠近的尺寸的icon来进行缩放使用。

【从AS2到AS3之二】访问控制以及命名空间

05月 10th, 2007 | No Comments , 113 views | Posted by flashlizi in Flash CS3/AS3

在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中代码为:
[code]
package flashrek.example{
public class DDD {
function DDD() {
var e:EEE=new EEE();

}
}
}
internal var internalStr:String="internalStr";
class EEE {
function EEE() {
trace(internalStr);
}
}
[/code]
那么如下代码运行结果为:
[code]
import flashrek.example.DDD;
var d=new DDD();//输出:internalStr
trace(internalStr);//输出:错误Err
[/code]
可以看出,类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):
[code]
package flashrek.example{
public namespace flashrek= "www.flashrek.com";
}
[/code]

然后在AAA.as文件中的代码为:
[code]
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");
}
}
[/code]
接下来再看运行结果:
[code]
import flashrek.example.AAA;
import flashrek.example.flashrek;
var a=new AAA();
a.flashrek::NStest();
//输出:
BBB
CCC
namespace test
[/code]
由此我们可以看出,通过a.flashrek::NStest();这样的方法,我们可以访问到NStest方法,而其他地方是无法直接访问到这个方法的。

在上例中大家发现,namespace很像一个类。确实有点像:)但namespace可以在package外,class内进行定义,而且也可以用public、internal等来进行访问控制。
比如去掉上例中的flashrek.as,而把AAA.as改成如下:
[code]
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");
}
}
[/code]
在这里namespace flashrek定义在package外,它只能在package级别访问到。因此用a.flashrek::NStest();是错误的。

【从AS2到AS3之一】常量&操作符&参数

05月 6th, 2007 | No Comments , 176 views | Posted by flashlizi in Flash CS3/AS3

随着Flash CS3正式版的发布,估计很多朋友都开始从AS2迁移到AS3了。不过AS3比AS2改变的实在太多,在as2中很多方法属性在as3中并不相同,甚至消失,而且目前帮助文档是E文的,现下的as3基础文章也并不多,因此特开此贴,集合一些基础性的要点,尽量以例子来说明,让大家更快更好的往AS3迁移。文中如有错误,敬请指正。有兴趣的朋友也可以一起来添加。

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

再看AS3代码:
[code]var str:String;
var num:Number;
var boo:Boolean;
var obj:Object;
var notyped;
trace(str+"\n"+num+"\n"+boo+"\n"+obj+"\n"+notyped);
//return
null
NaN
false
null
undefined[/code]

从上面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的用法更为灵活。看如下代码:
[code]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[/code]

从此例可以看出instanceof在as3中的比as2中有了变化。在as2中instanceof不会将原始类型转换为包装对象,因此在上面例子中的String验证中返回false,并且它对超类(如SuperTest)不起作用。而在as3中它只检查原型链,所以在第一个trace中会返回true。但是as3中instanceof并不支持接口,而is支持。[code]var mytest:Test = new Test();//Test implements InterfaceTest
trace(mytest is InterfaceTest); //AS3 return true
trace(mytest instanceof InterfaceTest); //AS3 return false[/code]

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

3、参数
在AS3中增加了一个… (rest)这样的参数。它的作用是指明函数可以接收任意多个以逗号分隔的参数。[code]function testfun1(param0, param1, ...arg)
{
trace(arg is Array,arg,arg.length);
}
testfun1("param0","param1","param2","param3");
//return: true param2,param3 2 [/code]

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

wow gold wow gold wow gold wow power leveling wow power leveling wow power leveling nike shoes nike shoes nike shoes nike shoes jordan shoes Jordan shoes jordan shoes Jordan shoes world of warcraft gold world of warcraft gold Replica handbags 1