About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jun

    24

    LabelItemRenderer 的文本在通过 setStyle 方法设置 fontFamily 时如果提供的是中文或日文,并不一定能按 Font 类的 fontName 来正确显示样式。

    推荐使用自定义 ItemRenderer 类,内部放入一个比较重量级 spark 的 Label 组件(因为移动开发时不支持 mx 组件,所以只能退而求其次选 spark 了)。这样就能通过 fontFamily 正确的显示所有非英文字体的样式了。

    Jun

    20

    物理尺寸单位一般用英寸表示,比如 iphone4s 为 3.5 英寸。像素尺寸单位一般就直接以像素表示,比如 iphone4s 屏幕分辨率为 640 像素 x 960 像素,一般用 PP 表示。物理点数(有些人称它为逻辑分辨率,也有些人称它为设备独立像素)一般用 DP 表示,比如 IPHONE 4S 与 3GS 有相同的物理点数都是320 x 480,但 4S 拥有不同的像素尺寸 640 x960。

    AS 可以有不少类的 API 都可以获取屏幕的像素分辨率尺寸,然后可以通过 Capabilities 类的 screenDPI 属性计算出一个设备屏幕的物理尺寸。但 AS 并没有提供任何属性或方法可以获取屏幕的物理点数。虽然 screenDPI  看上去像是获取每英寸内的 DP  值,但实际上它获取的是每英寸内 PP 值。

    如果使用 FeathersUI 的话,它里面提供了 DeviceCapabilities 类,能更方便的获取物理尺寸,但依然是不能获取物理点数的。

    Adobe 官方的博客有一节专门讲解了 “Calculating physical dimensions”:

    Looking at the dots-per-inch (more properly called PPI or pixels-per-inch), you can estimate how big your interface should be to avoid fat-finger mistakes. Apple suggests the minimum size for buttons and interactive objects should be 44 x 44 pixels for a 163 dpi screen (for example, an iPhone 3GS).

    Android uses the concept of density-independent pixels (dp), which is a normalized pixel unit for defining resolution compared to a 160 dpi screen. A device's dp is calculated as pixels * 160 / DPI. To determine the dpi, dp, and size in inches you can use the following code:

    Adobe 官方指出苹果公司推荐的 DPI 值是 160(实际是163,注意这个不是 Capabilities 里面 screenDPI 值,因为 screenDPI 实际是一个 PPI 值),但实际测试发现这个值在 IPHONE 上算出正确结果,但 PAD 上是完全错误的,所以这并没有什么卵用。

    移动版本的 AIR 并不支持 HTMLLoader 类,既便支持也不会有什么卵用,因为它使用的是 AIR Web 控件,所以读到的 99% 依然会是像素尺寸,不会是物理点数(因为不支持 HTMLLoader,所以我猜的)。

    但 AIR 支持 StageWebView ,它实际上调用的是系统原生的 Web 控件,而 Web 控件可以运行 JS,所以可以通过它来获取系统更多的信息。

    var swv:StageWebView = new StageWebView();
    swv.loadString('<script>function getInfo() {alert(window.screen.width + "x" + window.screen.height)} getInfo();</script>');

    现在可以很轻松的获得屏幕的物理点数了,但 StageWebView 中的 JS 是不能直接与 AS 交互的,所以要通过 location 来传递参数,但使用起来会比较不方便。推荐使用 StageWebViewBridge-master,它已经很好的包装了这个 location 属性,可以很方便的让 JS 与 AS 之间的通信。

    如果不知道 StageWebViewBridge 如何使用,这里有篇中文资料:http://bbs.9ria.com/thread-418243-1-1.html

    Jun

    20

    使用 StageWebViewBridge 时如果报以下错误:

    ReferenceError: Can't find variable: StageWebViewBridge

    是因为在 HTML 中找不到 StageWebViewDisk 类正则匹配的以下字符串:

    contents = contents.replace( _headRegexp, '<head><script type="text/javascript">' + JSCODE + '</script>' );

    需要注意这个匹配,或者自己修改:

    <head><script type="text/javascript">。。。。。。。。</script>

    无论是使用 loadString 或 loadURL,被加载的内容里面要包含这个匹配。

    Jun

    19

    Adobe AIR 开发者自定义 URL schema

    • 0 Comments
    • Flash Platform

    什么是 URL schema?举个例子:有两个 APP,想要在其中一个 APP 去打开另一个 APP,并给另一个 APP 启动时传入参数,这时候就要用到 URL schema。

    Adobe AIR 开发者可以自定义应用的 URL schema,定义方法参考官方提供的帮助文档:

    iOS 版:http://help.adobe.com/zh_CN/air/build/WSfffb011ac560372f7e64a7f12cd2dd1867-8000.html#WS901d38e593cd1bac354f4f7b12e260e3e67-8000

    安卓版:http://help.adobe.com/zh_CN/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffc.html#WS2d929364fa0b81373f2c6cba12a3522f10c-8000

    其中传入参数需要应用侦听 InvokeEvent 事件

    Jun

    16

    之前用 AIR SDK 16 时一直正常,说明驱动正常。昨天升级了一下 AIR SDK 到 18 版本后真机调试显示“Flash Bulider找不到连接的设备”。CMD 命令行中输入:

    <Flash Builder 4.7 Program Files>\eclipse\plugins\com.adobe.flash.compiler_4.7.0.348297\AIRSDK\lib\aot\bin\iOSBin\idb.exe -devices

    提示:

    iTunes MobileDevice library not found.Please ensure iTunes version 12.1.0.71 or greater is installed.

    升级 iTunes 至最新版本,搞定。

    Jun

    11

    Starling 的稳定版本为了兼容 iPad1 代产品,将纹理限制在 2048x2048,可以通过修改源码的方式将纹理大小扩展至和 AIR 支持的 4096x4096。但除了 iPad1 之外,还有其它的一些安卓低端产品也依然不支持大的纹理集,所以为了保持更好的兼容性,对于静态的资源集可以限制采用 2048x2048 纹理集。

    但 Starling 的滤镜比如 BlurFilter.createGlow 创建时,它是动态的纹理,如果滤镜应用到一个较大的显示对象上,那么依然有可能产生运行时异常,会报以下错误:

    Error #3683: Texture too big (max is 2048x2048).

    另一方面,滤镜因为是运行时产生,所以会占用 CPU 资源和较多的内存,而且还会增加 DRW 。所以最好避免大面积的使用滤镜(突然对滤镜没啥好感了),尤其对一个包含多个子对象的容器使用大面积滤镜,还是优先考虑静态的资源吧。

    Jun

    4

    比如断电,或 CPU 温度过高死机等原因,意外退出后无法启动 FB 4.7 了。

    进入到“工作空间”目录(不是程序的安装目录),进入 .metadata/.plugins/org.eclipse.core.resources 目录,找到 .snap 文件删除。搞定。

    Jun

    3

    关闭 Flash CC 2014自动恢复功能

    • 0 Comments
    • Flash Platform

    自动恢复功能挺烦人,经常好不容易做好的资源文件被无缘无故的还回去了。以前 CS6 版本至少还提示一下是否使用还原功能,新版的 CC 则完全不提示,使得我的资源文件直接倒档好几次。

    编辑—首先参数—常规—自动恢复,对勾去掉。

    May

    29

    May

    27

    AS 判断奇偶速度对比

    • 0 Comments
    • Flash Platform
    (i % 2) == 0                //10106,最慢
    ((i * 0.5)(i >> 1)) == 0 //2974,好奇葩
    (i & 1) == 1                //2277,最快
    !(i & 1)                    //2612,还可以