周期定时器:一个Flash Player10.1中不得不关注的特性

在Flash Player 10.1中,Adobe引入了一个全新的Periodic timer定时器概念,它可以改善浏览器中swf内容的CPU使用。在浏览器中的swf文件在不可见状态下(如窗口最小化,隐藏标签tab或页面滚动到swf文件以外的区域)会自动调节以降低资源消耗。(注:之前的Flash Player版本虽然不会渲染图形,但仍然在全速运行AS脚本,音视频编码解码等。)具体改变如下:

可见状态下:
1)SWF的帧频frameRate会被限制和校准为Jiffy时间模式(如最高60fps),但是目前的10.1 beta3仍然保留最高120fps的限制,这在正式版中将会被改变。
2)计时器(AS2中的Interval和AS3中的Timer)也会校准为Jiffy。
3)LocalConnection也同样会被校准。因此消息从一个swf文件到另一个swf文件至少需要33ms(也有说是40ms)。
4)Video不会做改变,他们可以在任何帧频下播放而不受影响。

不可见状态下:
1)SWF的帧频被锁定为2fps,不进行任何渲染。
2)计时器(AS2中的Interval和AS3中的Timer)被锁定为最多2次/秒。
3)LocalConnection也被锁定为最多2次/秒。
4)Video视频解码(不渲染和显示)只占用CPU空闲时间。
5)为了兼容音频,当swf中有音频在播放的时候,swf的帧频会被调整为8fps,同样swf中计时器和LocalConnection也做相应调整。

应该说这个特性非常有利于网络上flash应用的普及,但是也存在着潜在的风险。比如某些情况下,我们的应用程序需要在不可见的时候仍然保持着正常的运转,比如计时器的正确运行,某些事件按时发生,某些下载任务及时进行等等。当swf的帧速下降到2fps的时候,其影响是显而易见的。因此我们需要在swf不可见的时候仍然保持较高或者正常的帧速。目前有两种解决方法:

利用播放一个音频来使swf在不可见状态下维持8fps:
var gs:Sound = new GhostSound();
gs.play(0, int.MAX_VALUE, new SoundTransform(0));

用js的setInterval方法去调用swf的ExternalInterface.addCallback的方法,从而间接实现一些在不可见状态下必须全速运行的一些动作:
setInterval(callSWF, 50);
function callSWF()
{
var swf=document.getElementById("swfID");
if(swf)swf.execSomeMethod();
}

LEGO MINDSTORMS NXT 2.0

问题描述:在mac下装LEGO的软件,装好后发现没有可用程序,然后网上找啊找,找到以下方法:
To install LEGO MINDSTORMS NXT 2.0 on Mac OS 10.6 (Snow Leopard)
1. Copy all files from the MINDSTORMS CD to a folder on your desktop.
2. Open that folder and look under "Parts".
3. Locate MindstormsUnivEdu.pkg or MindstormsUnivRet.pkg.
4. Right-click (control-click) and choose "Show Package Contents".
5. Navigate into the Contents/Resources directory and delete the "preflight" file.
6. Close this package and run the meta-package from the desktop to install MINDSTORMS NXT

试了,无效,然后再找啊找,找到LEGO针对Snow Leopard补丁:http://mindstorms.lego.com/en-us/support/files/Patches.aspx

问题解决:下载其补丁,会再桌面生成一个安装光盘的copy,然后会自动进行安装。一切OK了。

Resource of LEGO NXT

官方网站:http://www.lego.com/en-US/default.aspx
最大的中文乐高机器人社区:http://www.cmnxt.com/
Robofun机器人论坛:http://www.robofun.net/forum/forumdisplay.php?fid=19
nxtprograms:http://www.nxtprograms.com/index.html
台灣樂高同好會 TWLUG:http://www.twlug.info/

BricxCC(最好的NXC IDE,可惜只有windows版):http://bricxcc.sourceforge.net/
NBC & NXC(编译器,没有IDE):http://bricxcc.sourceforge.net/nbc/

LEGO MINDSTORMS Education NXT 帮助与支持:http://www.cmnxt.com/guide/start.htm
LEGO各种搭建工具:http://www.cmnxt.com/thread-2018-1-1.html
NXC in Xcode on Mac:http://www.mastincrosbie.com/Marks_LEGO_projects/NXC_in_Xcode_3_on_Mac_OS_10.5.html
官方的一些资源:http://www.lego.com/education/school/default.asp?locale=2057&pagename=softu&l2id=3_2&l3id=3_2_4&l4id=3_2_4_2locale=2057&pagename=softu&l2id=3_2&l3id=3_2_4&l4id=3_2_4_2

aMessage

今天重新拿起放置已久的Arduino,做了一个aMessage,是通过Ethernet Shield给Arduino发消息并通过1602显示出来。

Arduino的调式真不容易,因为1602占用serial,每次upload都需要断开1602,超级麻烦,所以这个小东西花了我半天时间,哎。

还有一个问题就是网卡芯片用了ENC28J60,而不是官方推荐的,所以官方提供的库不能使用,以下是这块芯片的参考:
我现在用的:http://blog.thiseldo.co.uk/?p=329
比较权威的:http://www.nuelectronics.com/estore/index.php?main_page=project_eth

上个图,给大家看看:

关于convert Flash to iPhone or iPad

一直有人说flash直接能转成iPhone或iPad,最近vin也说可以。

在此,再次说明以下,flash转iOs是可以的,不过只限于简单的程序。比如一个正方形上下动动什么的。如果像现在iPhone上的游戏这么复杂的,都不行。如果flash library里的东西比较多,那么Flash CS5 publish的时候会当掉。

以下是CS5转iPhone的官方方法:
http://help.adobe.com/en_US/as3/iphone/WS789ea67d3e73a8b2-240138de1243a7725e7-8000.html

====================================

还有一个第三方的插件,但是之前我试了无效。最近出来新版本:ELIPS Studio 4,最近测试了一下。此插件号称可以把flash转成Xcode项目,我测试下来确实可以转换,但是用Xcode打开发布就会出现错误,丢失文件,而且里面的架构已经不是iPhone的,估计能行也有性能上的隐患。

在这里给出此插件连接:http://developer.openplug.com/

如有发布成功的兄弟请通知我:)

Using standard CPP for iOS development

问题描述:
今天在研究iPad与flash通讯。TUIO库使用标准C++(.cpp),而iPad使用OC(.m)。一调用TUIO类库就报错。

问题分析:
TUIO放入解决方案,不调用TUIO库中的内容不报错,一调用就报错。说明说连接问题,或者是不能这样调用。

问题解决
把所有.m文件改为.mm后缀,使其变为Objective-C++文件。
一切ok了。