About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jul

    2

    当定义一个子类的构造方法时,确保给超类的构造器提供了所有的必需参数。一般排序规则:先按父类的参数顺序写父类构造函数的所有参数,然后再写入子类的自定义参数。如在一个自定义事件类(Event 子类),一般先写入 Event 父类构造方法默认的三个参数 Event (type:String, bubbles:Boolean = false, cancelable:Boolean = false),然后再在cancelable 中写入自定义的参数。这只是一种一般的排序规则(如在官方的所有事件子类中),并不是强制要求的。

    注:自定义事件常量通常要么是事件目标类中定义,要么在 Event 子类被使用时由该 Event 子类定义(过程:自定义事件→调度自定义事件→侦听自定义事件)。

    Jul

    2

    一般它的排列顺序如下:final → dynamic→ 命名空间(默认的public或自定义的命名空间等)→  static

    Jul

    2

    ActionScript3 中的覆盖

    • 0 Comments
    • Flash Platform

    只能覆盖实例的非 private 修饰的方法(override 关键字),但不能覆盖实例变量、静态变量或静态方法,以及 private 修饰的实例方法。覆盖后父类的方法仍然是存在于子类的,可以通过super.methodName()来调用。

    Jul

    2

    当交互对象的 mouseEnabled 变量被设置为 false 时,这个对象接收不到鼠标事件通知(但它子级不会受到这个属性的影响,子级需要使用DisplayObjectContainer.mouseChildren 属性来设置)。当设置成 false 时,这个对象就好像变成了大交互对象一样(如果它的子级是非交互对象或子级对象被设置成了 mouseChildren = false,它会以显示列表上下一个最高的允许鼠标的 InteractiveObject 实例为目标)。

    Jul

    2

    AdvancedDataGrid 组件如果没有“根(比如拥有多个 XML 实例的 XMLList)”或“显示的根(比如将数据源 IHierarchicalCollectionView 实例 showRoot 设置为 false)”,那么在操作数据“项(行对象)”的增加或减少时,就会有滚动条显示上的一些 Bug 产生。可以对数据源使用 refresh() 方法刷新,或对 IHierarchicalCollectionView  分组数据的接口实例使用 refresh() 方法刷新。案例:PDF2SWF Pages Suite V8.x 版本的目录编辑器。

    Jul

    2

    ActionScript3:接口知识自省

    • 0 Comments
    • Flash Platform

    1、接口方法声明不可以包含访问控制修饰语;接口类中不可以定义变量,但可以定义get和set来模似变量;接口可以直接放在包语句中或任何包语句外,但不可以放在其它位置;实现接口的类定义必须是public属性的,并且完全匹配接口方法定义。

    2、如果一个类实现两个接口,它们定义了名字相同但签名不同的一个方法,编译器产生表明其中一个方法没有被恰当地实现的一个错误;如果一个类实现两个接口,它们定义了名字相同签名也相同的一个方法,不会有错误出现,但问题在于这个类是否能够在单个方法定义中提供两个接口所需要的服务,大部份情况下是否定的。

    3、普通的类 extends 只可以扩展一个父类,但接口类可以扩展多个接口类。如: 

    public interface IntE extends IntC, IntD {
    function methodE ():void;
    }

    4、标记接口(空接口),可以用于指出某一类的特征,允许被使用于某些特定的类。

    5、通过接口的多数据类型继承图标:

    6、Serializable 示例的多数据类型继承图示:

    Jul

    1

    Flex 常用编译器参数应用举例

    • 1 Comments
    • Flash Platform

    -locale locale[,...]:指定SWF文件的区域属性,如 -locale en_US

    -use-network=true|false:表示本地打开SWF文件时回放安全设置,true 表示访问网络,false 表示通过访问本地

    -swf-version=16:指定编译 SWF 文件的内部指定的版本(如这里的 16 表示 11.3)

    -keep-all-type-selectors=true|false:保证所有样式信息都被编译进SWF,甚至是程序没有用到的。默认值为false。

    -default-frame-rate int:默认的播放帧频,如果未填写该参数,默认为24帧/秒。

    -default-size width height:设置应用程序的默认舞台大小。

    -default-background-color int:舞台的默认背景色。

    Jun

    29

    在 ActionScript3 中,XML 并不真正的原生类,而是作为一份基于 ECMA-262 官方标准的原生类的扩展使用(更多信息可查看《ActionScript3 基本数据类型与原生数据类型》)。XML 数据类型是 Live 性质的。

    Jun

    29

    套接字发布者许可基本格式分两种情况,如果是基于HTTP的方式来获取一个套接字许可的策略文件,那么它的基本格式与跨域策略文件一致(参考《跨域发布者许可(策略文件)使用方法详解》)。如果是基于套接字的方式来获取一个套接字许可的策略文件,那么它的基本格式与与跨域策略文件类似,但在 <allow-access-from> 标签中需要加一个 to-ports 属性。

    1、在基于套接字的方式取得策略文件时, to-ports 属性中使用 * 是一个通配符,并且基于获取时的端口号来分配这个 * 号的范围,如果获取时的端口号小于1024(但不包括 1024),那么 * 表示相关的 SWF 文件对任何端口的访问都被授权;否则 * 号表示大于或等于 1024 的任何端口都允许被相关的 SWF 文件访问(此时既便小于 1024 的端口被显式的写入,也是无效的)。

    在基于套接字的方式中,如果SWF文件在相同的端口取得套接字的策略文与正常通信,那么Flash 播放器自动创建一个单独的端口,并通过发送一个 <policy-file-request/> 协义让服务器来响应获取相应的策略文件,随后是正常的连接请求。如果是不同的端口,那么需要先使用如下代码,来手工的装载一个策略文件:

    Security.loadPolicyFile("xmlsocket://domainOrIP:portNumber");

    随后是相应的正常连接请求的代码(它也是自动等待套接字策略文件的,是一种“伪同步”,与获取跨域策略文件一样),实际上使用的是 Socket 类来连接,但前面加载策略文件中强制使用 xmlsocket:// 协议。

    2、在基于HTTP的方式获取套接字策略文件时,它有以下这些条件限制:

    ● 它必须被命名为crossdomain.xml

    ● 它必须放置于网页服务器的根目录中

    ● 它必须在所需要的套接字连接的域名或IP地址的端口80上提供服务

    ● 在AS3中,它必须使用Security.loadPolicyFile() 方法来加载(使用http://协议)。

    由于基于HTTP方式获取套接字策略文件的方式是为了向旧版本兼容,实际上并不推荐使用,因为它无法使用 to-ports 属性来指定相应的端口,取而代之的它只给大于或等于 1024 的所有端口授予访问权(它不可以对小于 1024 的端口授予访问权)。同样,基于 HTTP 方式获取策略文件时也是“伪同步”的。

    More...

    Jun

    28

    策略文件往往被命名为 crossdomain.xml 的文本文件(非默认策略文件位置可以使用其它命名)。如果策略文件放在网站根目录,并命名为 crossdomain.xml(网站根目录是默认策略文件位置)会被自动加载,如果策略文件被放置在非根目录的其它任何位置,需要通过以下方式来加载:

    Security.loadPolicyFile("http://domainOrIP/pathToPolicyFile");

    策略文件在网站中的位置决定了资源文件集合可被加载的授权位置——存放的目录与该目录的子目录。使用 Security.loadPolicyFile() 方法时的代码是“伪同步”的(也就是在加载授权文件的代码后面可以直接添加加载操作的代码,它会自动等待策略文件的加载,加载完成后继续执行资源加载的代码——它是自动等待加载,但实际上并不会卡住播放器进程,所以是“伪同步”的)。一旦策略文件被加载成功,它的授权对所有以后进行的操作都有效。

    策略文件格式:

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
    <allow-access-from domain="domainOrIP"/>
    </cross-domain-policy>

    样例1,任意数量的域名授权(包括IP):

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
    <allow-access-from domain="example1.com"/>
    <allow-access-from domain="example2.com"/>
    <allow-access-from domain="example3.com"/>
    </cross-domain-policy>

    样例2,任意深度的子域名,包括一级域名本身:

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
    <allow-access-from domain="*.example1.com"/>
    </cross-domain-policy>

    样例3,任意域(如果要包含本地范围的一个授权,就只能将策略文件通过 domain 属性 * 来显式的指定):

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
    <allow-access-from domain="*"/>
    </cross-domain-policy>

    有了策略文件,在加载数据成功后,如果还需要访问被加载的数据,就需要在 AS 根据加载的数据类型来添加不同的代码,如果加载的是位图,在 Loader.load() 方法中需要添加 context 参数,也就是需要一个 LoaderContext 对象,并设置 checkPolicyFile 变量为 true;如果加载的是一个 MP3 文件,就需要一个 SoundLoaderContext 对象,并设置 checkPolicyFile 变量为 true。

    More...