About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jun

    10

    1、难以诊断潜在的错误(动态实例变量是否起作用的唯一途径是运行程序,并观察它的行为)。

     2、AS访问动态实例变量比访问一个固定变量需要的时间更长(当性能是关键时,避免使用动态实例变量)。

     3、动态实例变量只能使用于动态类,但默认扩展该类的子类不是动态的(除非该子类也声明为动态属性)。

     4、动态类的动态实例变量是可通过 for...in 等方式枚举的,但也可以通过 setPropertyIsEnumerable() 方法来设置它避免被 for...in 遍历循环。

     5、循环 for each...in 遍历动态变量的值,for...in 遍历的是动态变对量的名称(使用中括号如:“动态实例.[动态变量名称]”可访问该变量对应的值)。

     6、循环 for each...in 与 for...in 枚举一个对象时顺序是不固定的,它会随着不同的 ActionScript 版本或不同的 Flash 运行时环境而改变(但有两个例外是XML与XMLList实的变量是根据它们的数值变量名以递增的顺序排列的)。

     7、所有动态实例变量都是无类型的,并且是public属性。

     8、标识符构词规则不适用于“[]”号创建的动态实例变量,如点语法的 obj.411 这种是错误的,但中括号符的 obj["411"] 却是合法的。

    More...

    Jun

    2

    Apr

    9

    样例代码如下:乱码.rar

    该样例文件产生效果如下:

    FLASH CS3 中测试,加载和复制完全正常。

    FLASH CS5 中测试,发布设置发必须设置成FLASH 9播放器才能正常,如果设置成FLASH 10以上版本,就会非法操作。

    FLEX 3.6 中测试,加载和复制完全正常。

    FLEX4.6 中测试,加载过程正常,复制也成功,但静态的中文文本全部变成乱码。
     

    如果避开反射机制,使用二进制加载的方式就能正常加载和复制(无论是FLASH或FLEX,无论发布成什么版本都正常)。

    解决方法的样例代码如下:

    var loader:Loader = new Loader();
    loader.x = 400;
    addChild(loader);
    loader.contentLoaderInfo.addEventListener(Event.INIT, loadInitHandler);
    loader.load(new URLRequest("ye.swf"));
    function loadInitHandler(evt:Event):void {
     var cloneLoder:Loader = new Loader();
     addChild(cloneLoder);
     cloneLoder.loadBytes(loader.contentLoaderInfo.bytes);
    }

    More...

    Mar

    26

    ● corner0x & corner0y : 左底
    ● corner1x & corner1y : 右底
    ● corner2x & corner2y : 顶右
    ● corner3x & corner3y : 顶左

    Mar

    26

    AS3 版本的 Base64

    • 1 Comments
    • Flash Platform

     AS3 版本的 Base64,version = "1.1.0";

    文件下载地址:Base64.rar

    Feb

    18

    AS 主次版本号对比检测函数

    • 0 Comments
    • Flash Platform
    // returns true if the first version number is greater than the second, or false if it is lesser or indeterminate:
    // works with most common versions strings: ex. 1.0.2.27 < 1.0.3.2, 1.0b3 < 1.0b5, 1.0a12 < 1.0b7, 1.0b3 < 1.0
    private function checkVersion(v1:String,v2:String):int {
    var arr1:Array = v1.replace(/^v/i,"").match(/\d+|[^\.,\d\s]+/ig);
    var arr2:Array = v2.replace(/^v/i,"").match(/\d+|[^\.,\d\s]+/ig);
    var l:uint = Math.max(arr1.length,arr2.length);
    for (var i:uint=0; i<l; i++) {
    var sub:int = checkSubVersion(arr1[i],arr2[i])
    if (sub == 0) { continue; }
    return sub;
    }
    return 0;
    }
    // return 1 if the sub version element v1 is greater than v2, -1 if v2 is greater than v1, and 0 if they are equal
    private function checkSubVersion(v1:String,v2:String):int {
    v1 = (v1 == null) ? "" : v1.toUpperCase();
    v2 = (v2 == null) ? "" : v2.toUpperCase();
    if (v1 == v2) { return 0; }
    var num1:Number = parseInt(v1);
    var num2:Number = parseInt(v2);
    if (isNaN(num2) && isNaN(num1)) {
    return (v1 == "") ? 1 : (v2 == "") ? -1 : (v1 > v2) ? 1 : -1;
    }
    else if (isNaN(num2)) { return 1; }
    else if (isNaN(num1)) { return -1; }
    else { return (num1 > num2) ? 1 : -1; }
    }

     

    Jan

    18

    样例代码:

    var rootElementName:String = "BOOK";
    var rootAttributeName:String = "ISBN";
    var childElementNames:Array = ["TITLE", "AUTHOR", "PUBLISHER"];
    var bookISBN:String = "0141182806";
    var bookTitle:String = "Ulysses";
    var bookAuthor:String = "Joyce, James";
    var bookPublisher:String = "Penguin Books Ltd";
    var novel:XML = <{rootElementName} {rootAttributeName}={bookISBN}>
    <{childElementNames[0]}>{bookTitle}</{childElementNames[0]}>
    <{childElementNames[1]}>{bookAuthor}</{childElementNames[1]}>
    <{childElementNames[2]}>{bookPublisher}</{childElementNames[2]}>
    </{rootElementName}>;

    以上样例代码与以下资料摘自《 Essential ActionScript 3.0 》:

    Note that because the characters { and } are used to delimit a dynamic expression, they are not allowed in some parts of an XML literal. Specifically, within an element name, an attribute name, or element content, the entities &#x7B; and &#x7D; must be used to represent { and }, respectively. However, { and } can be used in literal form within an attribute value, a CDATA section, a processing instruction, or a comment.

    More...

    Jan

    16

    如果直接对 DataGridColumn 对象的 itemRenderer 或 itemEditor 属性指定一个类,而没有实现 IFactory 接口,是会报以下错误的:

    1067: Class 类型值的隐式强制指令的目标是非相关类型 mx.core:IFactory。

    定义一个 DataGridColumn 对象:

    private var _1DGC:DataGridColumn = new DataGridColumn("test");

    然后通过 ClassFactory 类生成一个 NumRestrictText 工厂对象(NumRestrictText 类为一个自定义类)。

    _1DGC.itemEditor = new ClassFactory(NumRestrictText);

    Jan

    14

    正则表达式入门教程

    • 0 Comments
    • Flash Platform

    ActionScript3 中 RegExp类允许使用正则表达式,并且为顶级类。在 ActionScript2 中没有内置的正则表达式类,可以使用第三方类来实现

    下载 ActionScript2 版本的第三方类:AS2_RegExp.rar

    正则表达式相关入门教程:http://deerchao.net/tutorials/regex/regex.htm

    Jan

    12

    AIR / FLEX / AS3 裁切图像

    • 0 Comments
    • Flash Platform
    import flash.display.BitmapData;
    import flash.display.DisplayObject;
    import flash.geom.Matrix;
    import flash.geom.Rectangle;
    //inScale为缩放系数
    function cropBitmapData( inDisplayObject:DisplayObject, inWidth:int, inHeight:int, inX:int, inY:int, inScale:Number = 1):BitmapData {
     if (!inDisplayObject) {
      throw new Error('inDisplayObject 显示对象必须在列表上');
      return null;
     }
     var cropArea:Rectangle = new Rectangle( 0, 0, inWidth * inScale, inHeight * inScale);
     var croppedBitmapData:BitmapData = new BitmapData( inWidth * inScale, inHeight * inScale);
     croppedBitmapData.draw(inDisplayObject, new Matrix(inScale, 0, 0, inScale, -inX, -inY), null, null, cropArea, true );
     return croppedBitmapData;
    }