About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Feb

    27

    官方帮助链接:http://help.adobe.com/zh_CN/as3/dev/WSb2ba3b1aad8a27b0-6ffb37601221e58cc29-8000.html

    ActionScript3 开源手势识别库

    基于 Starling 的国产库 AcheGesture:http://www.flashache.com/2012/12/17/ache-gesture-introduction/

    可以用于任何对象的 Gestouch:https://github.com/fljot/Gestouch

    两个手势类的 DEMO gestures.zip

    Feb

    27

    一旦使用了全局错误处理程序,那么在应用开发期间会很难测试&调试,因为无论是异常或错误事件,它都会直接获取。

    loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);

    可以在应用正式发布时添加,防止其它开发者作为普通用户使用时安装的调试版本播放器在运行时弹出捕获错误事件或异常的窗口。

    Feb

    27

    <name>:用于屏幕上显示的目的,它可以包含类似空格、中文等字符。

    <filename>:用于作为设备上安装 AIR 应用时文件名路径的目的。(但经验丰富的开发者们推荐文件名路径的值最好不要包含空格、中文等字符,个人猜测可能是因为低版本的安卓系统、或特定的安卓系统中文件名路径不能很好的支持这类字符)。

    备注:另外打包时调有的 ADT 目标(target 参数)如果为安卓平台,那么 AIR 打包时的应用程序描述符文件也不能包含中文字符。比如在Flash IDE 环境中,它会提示“创建文件时出错,无法解析应用程序描述符文件”,命令行中也是相同的。

    Feb

    25

    下载链接lame3.98.4.zip

    Feb

    25

    每次 Adobe AIR SDK 升级之后,会发布一些新版 SDK 的功能介绍,但这些功能介绍总是转着转着、传着传着就被曲解了,以下每一种情况都是本人亲自测试结果(技术是严谨的,容不得“好像”、“可能”等模棱两可的词,可以就是可以,不可以就是不可以,如果觉的不确定,那就必须亲自测试判定是否可以;如果有多种条件,那么还要确定在哪些条件下可以哪些条件下不可以。如果凭借着自己的想象给新功能介绍添油加醋、胡乱编造,那样就会误人子弟),本人使用的测试环境为最新的 AIR SDK 4.0 官方正式版本。

    如苹果公司 APP Stroe 平台限制 Adobe AIR for  iOS 打包的应用要求是单个应用域,不允许主 SWF 文件运行外部带有代码的子 SWF 文件,这里面有非常重要的信息容易被人曲解,更有甚者是将它添油加醋(以下测试结果中如果没有特别说明,主文件就是指主 SWF 文件,子文件就是指被加载的子 SWF 文件)比如:

    1、有人会按着自己的猜测而未经测试,理解成  iOS 系统不允许加载外部带有代码的子文件,这是错误的。因为这是 APP Stroe 平台的限制,不是 iOS 限制,本身  Adobe AIR for  iOS 打包的程序可以用非 AOT 模式(解析模式)是允许加载外部子文件的,甚至是服务器上的远程子文件,并且都可以带有 AS 代码,并且正常执行它们。而提交到  APP Stroe 平台是必须使用 AOT 模式,不允许外部带有 AS 的子文件。换种说法,只要是 AOT 编译模式生成了 APP,就不允许主文件加载外部带有 AS 代码的子文件,而跟最终是否发布到 APP Stroe 平台没有关系(APP Stroe 平台只是限制了必须使用 AOT 模式编译的APP)。

    2、以二进制方式将带有 AS 代码的子文件使用 [Embed] 元标签直接嵌入到主文件中,可以像单个主文件那样直接编译成 APP,并使用 Loader 加载库中的二进制子文件,这也是错误的。以二进制方式将子文件嵌入到主文件的库中后,仍然是只能在解析模式下加载并执行代码的。 AOT 模式是不允许的,既便是 Loader 方法加载到主文件的同一个应用域,也是不允许的。因为 AOT 编译模式不会编译库中带有代码的二进制元件,库中的元件编译后在格式上仍然是一个带有可执行 AS 代码的、独立的子文件,使用 Loader 时它仍然算是运行时动态加载带有 AS 代码的子文件(这也是下面要说的第三种情况中,子文件不允许使用 Flex 框架的子文件的原因,因为 Flex 框架的部份组件中含有嵌入的二进制库元件的原因)。

    3、重头大戏:新版 AIR SDK 在 AOT 编译模式下会将子文件中的代码提取出来合并到主文件中去,这里需要分多种情况:只有当条件满足时才是对的,否则就是错的(事实上这种说法本身存在一些问题,因为当所有条件满足时,子文件中的代码只是被打包进 *.ipa 文件了,并不是真的合并到主文件中去了,包括主文件的代码也会被提取,打包到 *.ipa 文件中去;主文件和子文件被剥离了代码后只剩下了资源 SWF 文件,也被打包到 *.ipa 文件中去了。但一般通俗口头上来,也可以认为是子文件中的代码被合并主文件中去了,只是一种更简单的说法罢了)。

    因为子文件中的代码是否会被合并到 *.ipa 文件中去,并不完全由是否使用最新版本的 AIR SDK 决定的(虽然官方是从 3.7 版本开始加入这个功能的,但现在本人用的是4.0),除了需要使用最新版本的 AIR SDK 外,还要求主文件的内部版本号必须大于等于 20(本人测试时使用的是23,关于 SWF 文件内部版本号可参考《Flash 播放器版本与 SWF 内部版本号(含评论)》),以及带有代码的子文件不能以二进制文件的方式被嵌入到主文件的库或其它文件的库中作为元件。否则就算是使用最新的测试版本 AIR 13.0( AIR 为了保持和 Flash 相同的版本号,跳过了5、6、7、8、9……等版本号,下一个版本将直接从 AIR4.0 升到 AIR 13.0),也不会将子文件中的代码合并到主文件中去。

    子文件不允许使用 Flex 框架开发出来的子文件,因为 Flex 框架中的一些组件中含有嵌入的二进制库元件。官方在发行说明中声称加载 Flex 二级 SWF 会导致应用程序崩溃,同时也不允许加载大型的子文件(如包含 Video 这样资源较多的文件),也会导致应用程序崩溃。

    另外子文件被剥离代码后的资源文件是否被打包到 *.ipa 文件中,由一个外部的文本文件以及应用程序描述符文件决定,即资源文件可以不被打包到 *.ipa 文件中,可以远程托管(便于远程更新,但每次更新资源是需要经过编译的,直接替换带有 AS 代码的子文件是不行的),它的完程过程在 Adobe  官方提供了一个完程的教程(《External hosting of secondary SWFs for AIR apps on iOS》。

    备注:还有其它一些乱七八糟的错误说法,大多可能来自一些可能刚加入AIR for iOS 开发者的一些错误的理解,如果觉的不确定,不要自己凭空猜测,请拿实例做测试,附上两个测试用的文件(测试的时候请特别注意主文件的内部版本号,否则就会和很多开发者一样得到一个错误的测试结果)。

    测试文件下载:第一个 Loader 样例:IOS_Test.rar    第二个 Embed 样例:iOS_Embed_Test.rar

    官方帮助链接http://help.adobe.com/zh_CN/air/build/WSfffb011ac560372f7e64a7f12cd2dd1867-8000.html

    Feb

    25

    优酷视频有时候打开视频页面后,会出现黑色界面并提示如下:

    抱歉,目前无法找到视频,您可以尝试刷新操作。

    如果问题仍未解决,请反馈给我们。

    代码:2001

    出现这个提示问题,很可能是宽带服务商的线路造成的,比如移动宽带。可以使用一个 VPN 代理链接一个国内的电信服务器,点击“刷新”就可以正常观看视频了。VPN 代理有免费的和收费的,一般免费的 VPN 代理用户人多,所以很容易被挤掉线,有些免费 VPN 本身有流量限制或时间限制,所以还是推荐用收费的 VPN 代理。

    个人推荐鲨鱼加速器,里面有免费的 VPN 代理服务,也有收费的 VPN代理服务。鲨鱼加速器网站可以点击这里进入。

    More...

    Feb

    25

    使用了某个功能的 Android ANE 后出现一个如下的 TOP-LEVEL 异常错误:

    dx tool failed:
    UNEXPECTED TOP-LEVEL ERROR:
    java.lang.OutOfMemoryError: Java heap space
     at java.util.ArrayList.(Unknown Source)
     at java.util.ArrayList.(Unknown Source)
     at com.android.dx.ssa.SsaMethod.buildUseList(SsaMethod.java:423)
     at com.android.dx.ssa.SsaMethod.getUseListForRegister(SsaMethod.java:615)
     at com.android.dx.ssa.SCCP.addUsersToWorklist(SCCP.java:105)
     at com.android.dx.ssa.SCCP.simulateStmt(SCCP.java:385)
     at com.android.dx.ssa.SCCP.simulateBlock(SCCP.java:199)
     at com.android.dx.ssa.SCCP.run(SCCP.java:400)
     at com.android.dx.ssa.SCCP.process(SCCP.java:84)
     at com.android.dx.ssa.Optimizer.runSsaFormSteps(Optimizer.java:161)
     at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:101)
     at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:74)
     at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:269)
     at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131)
     at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85)
     at com.android.dx.command.dexer.Main.processClass(Main.java:299)
     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:278)
     at com.android.dx.command.dexer.Main.access$100(Main.java:56)
     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:229)
     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:130)
     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
     at com.android.dx.command.dexer.Main.processOne(Main.java:247)
     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
     at com.android.dx.command.dexer.Main.run(Main.java:139)
     at com.android.dx.command.dexer.Main.main(Main.java:120)
     at com.android.dx.command.Main.main(Main.java:89)

    由于原先一直正常,最后一次在优化代码后,在调试时出现上述问题,经过数小时的努力,仍然百思不得其解。但原先已经发布的项目切依然可以正常编译,所以最终放弃了调试,直接将项目发布到生产模式,运行的时候发现又正常了。怀疑是 ANE 文件编译时版本的问题,所以再次测试,果然在 Flex 调试模式下输出 JAVA 版本与在生产模式下(系统的 JAVA) 版本并不相同。

    调试模式下输出结果为:

    java version "1.6.0_16"
    Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
    Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode)

    生产模式下输出结果为:

    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing)

    所以当出现“dx tool failed: UNEXPECTED TOP-LEVEL ERROR:”错误时,可以尝试在最新版本的 JAVA 运行时环境下编译。

    More...

    Feb

    24

    虚拟摇杆在移动游戏开发中非常常见,以下为几个虚拟摇杆常见的样例代码参考

    虚拟摇杆(任意方向).rar 

    虚拟摇杆(八方向匹配).rar

    Adobe开发者中心(任意方向).rar

    附案例代码出处:

    “任意方向”版(英文):http://johnstejskal.com/blog/virtual-joystick-for-mobile-games-using-as3/

    “八方向匹配”版(葡萄牙文原版):http://www.tutoriaisflash.net/2011/06/criando-um-joystick-virtual-para_4885.html

    “八方向匹配”版(简体中文译版):http://www.kuqin.com/gamedev/20120525/320716.html

    Adobe 开发者版本:http://www.adobe.com/cn/devnet/actionscript/samples/interactivity_3.html

    Feb

    22

    在操作带有命名空间的 XML 数据时,为了节省开发时输入更少的代码,往往使用 default xml namespace  命令为设定一个默认的命名空间,可以省去重复的输入命名空间+::语法,但这有可能引发严重的 Bug。这种情况有可能发生在一个对象方法的内部或嵌套的函数内部中,运行时产生异常误错。如:

    typecheck XXXXX outer-scope = [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ flash.display::MovieClip$ Level$]

    在代码复杂的情况下,代码编辑器、代码编译器,以及代码除错器并不一定全部能正常工作,甚至有可能是错误的方式工作,尽量将代码简化,或使用最常规的语法进行编码。

    More...

    Feb

    21

    Flash Builder 4.x (简称 FB)版本中提供了新建 Fla 项目的功能,但如 Fla 项目本身是一个 AIR 项目,FB 在“属性 - AS 构建路径”中是没有 ANE 扩展选项卡的。但如果 AIR 又必须用到 ANE 文件,又不想返回到 Flash 环境中去编写代码(因为 Flash IDE 代码编辑器的功能比较弱,没有代码重构、代码历史记录等功能,编码快捷键少),就可以用修改文件名后缀的技巧。

    用 WinRAR 等解压软件其实可以打开 ane 文件,会发现它的文件结构其实跟 swc 文件是一样的。所以只需要将 ane 文件名后缀改为 swc,然后添加到库路径中即可,这样就可以在 FB 中像普通的 swc 库文件一样使用代码提示、代码重构等功能了。

    一个更简单的方法是将 ane 文件放在项目文件夹的 libs 目录中,FB 会自动把 ANE 文件当成库文件来用:)