About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jan

    26

    使用 lock() 方法提升位图编程很简单,但 unlock()方法带有一个 changeRect:Rectangle 参数;使用它并不是指解锁部个区域,而是在使用 unlock() 方法时通知更新的区域,但解锁的是整个 BitmapData 对象。以下样例代码分 4 步演示整个过程:

    var changeRect:Rectangle = new Rectangle(20206060);
    var clickCount:int = 0;
    var bitmapData:BitmapData = new BitmapData(100100, false, 0xFF);
    var bitmap:Bitmap = new Bitmap(bitmapData);
    addChild(bitmap);
    stage.addEventListener(MouseEvent.CLICK, click);
    function click(event:MouseEvent):void {
     clickCount++;
     switch(clickCount) {
      case 1:{
       bitmapData.lock();
       trace("bitmapData 对象被锁定");
       break;
      }
      case 2:{
       bitmapData.fillRect(bitmapData.rect, 0xFF0000);
       trace("bitmapData 对象更换颜色,但由于它仍然处于锁定状态,所以不会通知视图更新");
       break;
      }
      case 3:{
       bitmapData.unlock(changeRect);
       trace("bitmapData解锁了整个对象,但只有中间部份更新了视图,四周旁边并没有更新视图");
       break;
      }
      case 4:{
       clickCount = 0;
       bitmapData.fillRect(bitmapData.rect, 0xFFFF);
       trace("整个bitmapData都可以更新了");
       break;
      }
     }
    }

    Jan

    25

    Adobe AIR SDK 4.0 在 Release 版本最新发布后进行了测试,在 使用 -useLegacyAOT no 参数后(新的 halfmoon 编译器),确实让 AOT 编译模式加速了 5-10 倍,基本上可以说跟解析模式的打包速度差不多了。

    但在实际测试过程中发现了一个严重的 Bug,在中文系统中,有时会提示“命令行太长”或“输入行太长”,并且会带有以下英文提示:

    Compilation failed while executing : compile-abc

    当然,它并不是真的因为命令行或输入行太长造成的,因为既便用户全部使用系统环境来缩短命令行,也会是相同的提示;换句话说,只要不使用“ -useLegacyAOT no”参数(不使用 halfmoon 编译器),使用更长的命令行也可以正常编译。

    搜索之后,发现早在 Beta 版本时就已经有人在 Adobe 官方论坛提交过这个 Bug,但在 Adobe 发布 Release 版本时并未修复这个问题。Release 版本发布之后仍然有许多其他人在 Adobe 官方论坛提交了这个问题,称之为“毫无逻辑”的 Bug。

    所以目前的 4.0 版本如果在使用 “-useLegacyAOT no”参数之后,出现了这个问题,除了禁用“ -useLegacyAOT no”参数,没有任何解决方法(当然,编译的时间也会跟 3.9 以前的版本一样长),只能等待 Adobe 更新 AIR SDK 修复这个问题。

    More...

    Jan

    21

    Adobe AIR 移动应用程序自动侦听舞台旋转和舞台的 resize 事件,然后旋转移动设备几次后,会发现 TextField 的自适应布局功能计算出来的尺寸会有问题。可以使用一个延迟刷新的 CallLater 类解决这样的问题(在其它一些情况中,比如 autoSize 属性更改、文本样式更改,或 text 属性与 htmlText 属性混合更改时,TextField 对象的尺寸属性往往会有一些“异步”的效果出现,都可以使用 CallLater 类解决)。

    More...

    Jan

    21

    测试结果:如果需要对位图进行添加、缩放等操作,beginBitmapFill() 速度远大于draw() +addChild() 方法。使用 beginBitmapFill() 不会产生事件,所以不会有事件对象产生以及事件冒泡过程;并且对 beginBitmapFill() 和 draw() 方法使用相同的 Matrix 矩阵变形时,小图测试 beginBitmapFill() 速度将近是 draw() 方法的10倍左右(0.03 毫秒左右相对 0.3 毫秒左右)。并且随着图片尺寸的增大和颜色数量的增加,发现 draw()  的速度下降非常快(时间延迟明显不断变长),但 beginBitmapFill() 速度下降较慢。

    但在使用 beginBitmapFill() 时需要注意以下几点: 

    1、如果可能,尽量在使用 beginBitmapFill() 之前调用 clear() 方法,否则它也将会保留前面的绘图过程(既便是像素完全重叠,它也会保留前面所有绘图的数据),最终也会导致严重的性能问题。

    2、对外加载的图像或嵌入的图像而言,使用 beginBitmapFill() 方法后,位图对象被移除(Bitmap 对象引用如果被设置为null),BitmapData 对象的数据本身并不会被移除。如果强制调用 dispose() 方法来释放位图数据所占用的内存,那么也将丢失 beginBitmapFill() 方法已经填充的像素信息;如果需要为内存考虑,如果在可以放弃一定效率的情况下,使用 draw() 方法生成一个较小的 BitmapData 来保存图像信息,否则只能牺牲一点内存来保存图像数据。

    3、嵌入的位图最佳方式是原始库元件的形式;慎用二进制嵌入方式,因为二进制库元件加载是异步的,并且二进制解码也将会损耗一定的时间和性能。

    以上内容只针对 Adobe AIR 移动开发中添加对象、缩放对象时对性能、速度、内存等有较高要求的情况做了测试。

    Jan

    18

    1、启动 CMD 窗口(在开始菜单的运行中输入 CMD 后回车)。

    2、在 CMD 中输入"C:\Program Files\Bonjour\mDNSResponder.exe" -remove (注意半角引号的位置)。

    3、打开 C:\Program Files\Bonjour ,重命名 mdnsNSP.dll 为 mdnsNSP.old。

    4、 重启电脑, 删除 C:\Program Files\Bonjour 文件夹。

    Jan

    17

    实测在苹果公司的 iOS 系统的 iPhone 、iPad 、iPod 等移动设备的中,在对相同的 touchPointID 的多个事件对象进行处理时,当手指轻触屏幕单击的时候 touchBegin,touchEnd 是非常精确的,并不会有任何 touchMove 事件产生。

    在安卓设备生产商太过鱼龙混杂了,会发现很多品牌的手机设备触屏精度并不准确:手指单击屏幕时,往往会产生 touchMove 事件,导致 touchEnd 事件和 touchBegin 事件的 stageX 与 stageY 属性值总是会相差那么一点,好一些的是 0.5 - 3;差一些的低端安卓机在3-7(既便是大生产商也存在这个问题,比如三星、索尼、联想等生产的中低端机,其它小生产厂商更是严重)

    如果需要开发一个精度相当高的应用,那么就不得不使用一些技巧。比如通过一个临时的 Point 变量来保存 touchBegin 的 stageX 与 stageY 的值。然后将 touchEnd 与 touchBegin 事件对象的 stageX 与 stageY 进行比较(可以使用一个精度阈值约为10)后再处理具体的业务逻辑,但这有可能让开发者多写上十几行、甚至几十行代码进行蛋疼的调试和优化。

    精度不准确时不仅会影响到基于精度的 APP 开发,而且还会产生其它问题。比如还会影响到基于速率的 APP开发,一个瞬间的抖动会产生一个较大的瞬间加速度值,甚至是一个逆向的加速度值。所以搞安卓应用和游戏开发者们如果涉及到屏幕精度的开发,那么就不得不极其小心的进行多种设备的测试。

    不得不为 Apple 公司垄断性的生产硬件赞一个。如果每一家公司的硬件都像苹果公司那么优秀,那么开发者会省很多事。苹果的 APP 总是设计的那么高效和优秀,这不仅仅是严格的审核机制和 iOS 系统带来的,跟它的硬件设备也有着非常大的关系。

    Jan

    16

    现象:数据线能正常充电,但连接电脑后无法正常驱动,并显示为 Unknown Device ;请先尝试重装 iTunes 软件,如果仍然没有解决的话(很可能是数据线中的 lightning 损坏)换数据线吧(原装的数据线 150 元左右,第三方数据线 10-20 元,山寨的数据线 5 元左右。天朝的山寨果然强大- -)。

    More...

    Jan

    16

    从 Starling 开始。

    如果 Flash 平台开发者已经使用过 Starling 这个框架,那么一定知道 Starling 对象中有一个 simulateMultitouch 属性,这个用属性可以使用鼠标模拟手指的触屏功能,但它 仅限于 Starling 框架的对象(Starling 框架是由 Adobe 提供的游戏开发框架的一部份,主要是为移动游戏开发时提供硬件加速功能)。Starling 有一个性能瓶颈问题,即:运行时不能频繁的向 GPU 提交位图,否则将会导致严重的性能问题,所以一般在游戏的开发过程中,每个场景往往是一次性向 GPU 提交一个位图序列集合(Sprite atlas,或sprite sheet)。

    一次性向 GPU 提交位图序列集合是有非常大的限制的:位图序列集合文件不能过大,否则向 GPU 提交以及 GPU 解码的时间会非常长,所以只适合提交游戏资源类的位图序列集合。比如一张场景图,和一系列的人物的动作、以及表情和装备等低精度的、小尺寸的位图序列集合。然而如果开发的是一个应用,需要有 A4 纸大小的照片级高精度图片 500 张(或 500 张照片本身是运行时动态加载的外部文件),那么就完完全全不能使用这种方法。并且由于不能频繁的在运行时动态的向 GPU 提交这 500 张位图资源,所以唯一的方法就是使用传统的显示列表对象进行开发(因为每次向 GPU 提交位图需要花很长时间,并且需要解码以及生成2的倍比的多个尺寸的映射图)。

    回到传统显示列表对象。

    利用传统显示对象进行移动开发应用的时候,在使用 TouchEvent 时候,舞台对象没有提供任何类似 simulateMultitouch 属性允许我们进行触屏模拟。万幸的是在 Flash Professional 工具中除了提供 AIR 模似器之外,还提供了一个功能十分强大的物理真机模似器(Simulator)。物理真机模似器除了提供鼠标模拟触屏功能外(允许多个点),还能旋转、重力加速、地理位置等多个功能的模似(这比 Starling 提供的 simulateMultitouch 属性实在强太多了)。

    然而,默认情况下,使用 Flex 工具进行开发的用户,只有 AIR 模似器,并没有物理真机模似器(至少现在的 4.6 / 4.7版本都没有),如果每一次需要编译后发布到真机环境上去调试 / 测试 TouchEvent  事件的话,那么是非常麻烦的。不要举丧,Adobe 产品最大的特色就是支持“软件接力”(当然开发者也可以直接使用“动态加载”的方式在物理真机模似器中进行调试),所以 Flex 的开发者在进行移动应用类开发时并不需要每一次都发布到真机环境中去调试触屏、重力加速、地理位置等功能。Nice !

    Jan

    14

    ffmpeg 常用命令用法举例收集

    • 0 Comments
    • Miscellaneous

    1、得到视频信息

    ffmpeg -i input.xxx

    2、将图像序列转换为视频

    ffmpeg -f image2 -i prefix%d.jpg output.xxx

    3、将视频转换为图像序列

    ffmpeg -i input.xxx prefix%d.jpg

    4、将视频转换为yuv格式

    ffmpeg -i input.avi ouput.yuv

    5、通过摄像头录制视频(windows)

    ffmpeg -f vfwcap -15 -0 output.avi

    6、播放视频

    ffplay input.avi
    ffplay -640×480 input.yuv

    7、旋转视频90度

    ffmpeg -vf ”transpose=1″ -i input.mp4 output.mp4

    8、截取音频的中指定时间的一段(-ss -t 都支持 hh:mm:ss 格式)

    ffmpeg -ss starttime -t totalseconds -i inout.mp3 -acodec copy output.mp3

    更多用法参考:

    http://www.webupd8.org/2009/08/ffmpeg-cheat-sheet-19-best-practices.html

    http://rodrigopolo.com/ffmpeg/cheats.php

    More...

    Jan

    13

     

    上个世纪 80 年代的动画片,没有高清的画质,中文配文也很差。可是有什么东西能除挡小孩子对太空的幻想呢,何况是一架会变型的机器人战机:)

    More...