About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Nov

    10

    自定义函数的参数是array、point等类型时不能指定默认值。比如:

    var a: Array = [123];
    function test(b: Array = [120])
    {
     trace('b:' + b);
    }
    test(a);
    trace("Rarray:" + a);

    上面这个代码编译时就会报错:参数初始值设定项未知或不是编译时常数。改成下面这样子就可以了:

    var a: Array = [123];
    function test(b: Array = null) {
     if (== null) b = [120];
     trace('b:' + b);
    }
    test(a);
    trace("Rarray:" + a);

    Nov

    3

    API 手册中写的是:

    注意:当在 Mac® OS X 上选择并打开多个文件时,AIR 将调度单个 invoke 事件,该事件在 arguments 数组中包含所有所选文件的名称。但是,在 Windows ® 和 Linux 中,AIR 将为 arguments 数组中只包含该文件名的每个所选文件调度一个单独的 invoke 事件。

    这句话前半句对 MAC 写的很清晰,但后半句对 Windows ® 和 Linux 写的很含糊。

    举个例子:AIR 程序先关联某个后缀名,然后同时选中两个文件后,右键菜单中选择“打开”。当应用程序启动后就会发生 invoke 事件,但 MAC 和 WIN 上各有区别。

    虽然选中了两个文件,但在 MAC 上只会调用一次 invoke 事件,在 arguments 数组参数中包含两个元素,分别是对应的两个文件名(请注意是文件名类型是 String,不是文件 File 类型)。而在 WIN 系统里,两个文件在同一个应用里会产生两次 invoke 事件,并且 arguments 数组长度为 1,也就是数组元素永远只包含 1 个元素

    Nov

    1

    Flex MXML 花括号绑定语法在编写程序时非常方便,可以省去大量的编码工作,让编译器自动完成。在使用列表类组件时,有时会遇到这样的提示:数据绑定将无法检测对“length”的指定。虽然它不会影响最终结果,但在调试和发布时都会遇到警告。

    比如,有一个按钮只想在列表类组件选中一行时启用,在未选中或多选几行时禁用,虽然可以这么写:

    //它会产生一个警告:数据绑定将无法检测对“length”的指定
    enabled="{Boolean(dg.selectedItems.length == 1)}"

    从 API 手册中可以查到 selectedItems 可以用于绑定操作,但它是一个 Array 对象,而 Array 的 length 属性并不可以用于绑定操作。需要作一些修改: 

    //这样世界就安静了
    enabled="{Boolean(new ArrayList(dg.selectedItems).length == 1)}"

    因为 API 手册中写了 ArrayList 的 length 属性可以用于绑定操作。

    Oct

    31

    比较通用,反正 AS、JS 之类的都差不多语法。

    static public function randomAccountString(_len:uint):String
    {
        //帐号一般第一个字母不能为数字
        var charsForFirstChar:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

        var firstChar:String = charsForFirstChar.charAt(uint(Math.random() * charsForFirstChar.length));

        var chars:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        var randomChar:String = "";

        for (var i:Number = 0; i < _len - 1; i++)
        {
            randomChar += chars.charAt(uint(Math.random() * chars.length));
        }

        randomChar = firstChar + randomChar;

        return randomChar;
    }


    static public function randomPasswordString(_len:uint):String
    {
        //密码往往是区分大小写的,并且允许使用一些特殊符号
        var chars:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,[]{}!@#$%&*()_-+=";

        var randomChar:String = "";

        for (var i:Number = 0; i < _len; i++)
        {
            randomChar += chars.charAt(uint(Math.random() * chars.length));
        }

        return randomChar;
    }

    Oct

    31

    无论是在 Web 版还是在桌面 AIR 运行时环境,无论是默认的或自定义的项编辑器 itemEditor,都 发现存在这个问题:先让运行时环境失去焦点,然后再让运行时环境重新获得焦点。此时如果 DataGrid 有焦点,并且有项被选中,会发现被选中的项的项编辑器会一闪而过,虽然不影响操作,但有碍视觉效果,尤其是使用一个较大面积的自定义项编辑器时(如果是默认文本项编辑器因为面积很小甚至很难注意到它)。可以用如下方法处理:

    定义一个变量 canEnabledItemEdit 默认值为 true, 表示默认情况下允许点击单元格后自动使用项编辑器。但需要通过对 itemEditBeginning 事件加以验证:

    private function itemEditBeginningHandler(e:DataGridEvent):void
    {
      if(!canEnabledItemEdit)
     {
      e.stopImmediatePropagation();
      e.preventDefault();
     } 
    }

    与之对应的在运行时失去和获得焦点时设置 canEnabledItemEdit 的值: 

    //假装很高级的省略了一些包与类相关的代码
    NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, deactiveHandler);
    NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, activeHandler);

    private function deactiveHandler(e:Event):void
    {
     canEnabledItemEdit = false;
    }

    private function activeHandler(e:Event):void
    {
     this.callLater(callLaterHandler);
     
     function callLaterHandler():void
     {
      canEnabledItemEdit = true;
     }
    }

    Oct

    19

    偶然看到,收藏一下先:https://github.com/mindjolt/starling-builder-editor

    Oct

    4

    无论是安卓还是IOS,在真机调试时有时候会出现两个相同设备。解决方法,运行一个批处理:

    adb kill-server
    adb start-server
    adb devices
    echo.&pause

     

    原文链接:http://bbs.9ria.com/thread-418251-1-1.html

    备注:虽然该链接中写的是安卓,但实际上 IOS 在安装了 PP 助手之类的软件时也会出现这样的情况。

    Sep

    22

    1、准备一个纯文本文件,命令为 “txtcounter.txt” ,里面写一个数字“0”, 用它就可以当数据库了。

    2、准备一个 asp 文件,环境最简单,只需要一个 IIS 环境就可以了。asp 内容如下:

    <%
    CountFile=Server.MapPath("txtcounter.txt")
    Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
    Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE)
    counter=Out.ReadLine
    Out.Close
    SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
    Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE)
    Application.lock
    counter=counter + 1
    Out.WriteLine(counter)
    Application.unlock
    Response.Write"document.write("&counter&")"
    Out.Close
    %>

    3、AS 代码如下:

    var url:String = "http://www.[某个地址].com/count.asp";
    var request:URLRequest = new URLRequest(url);
    var variables:URLVariables = new URLVariables();
    variables.exampleSessionId = (new Date()).getTime();
    request.data = variables;
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.load(request);

    就这样,一个最简单的统计功能就搞定了。可以用于快速的实现临时计时、计数等功能。

    备注:txt  与 asp 文件保存时推荐使用 ANSI 编码。

    Sep

    16

    robotlegs 声音扩展管理

    • 0 Comments
    • Flash Platform

    偶然看到一个 robotlegs 声音扩展管理类。

    GitHub 地址:https://github.com/suspendmode/robotlegs-sound-manager-extension-example

    个人感觉 SoundAS 更简单,并且功能更强大。

    Sep

    16

    中文发行说明地址格式如下:

    https://helpx.adobe.com/cn/flash-player/release-note/fp_xx_air_xx_release_notes.html

    其中红包的 “xx” 字符替换成对应的数字版本,比如“Flash Player® 18、AIR® 18 发行说明”地址为:

    https://helpx.adobe.com/cn/flash-player/release-note/fp_18_air_18_release_notes.html

    但并不是所有的发行版本对应的都会有中文说明,有些版本是没有中文发行说明的,会自动转向到英文版本发行说明的地址。如果版本不存在或是 beta 版本还没有发布对应的发行说明地址,那就是404 页面。