周期定时器:一个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();
}

swf加密解密工具

加密:
DoSWF:不错的加密工具,选项也很丰富,可对SWF进行加密、混淆、注入随机代码、水印等,非常强大,推荐使用。
SWF Encrypt:老牌的加密工具,没有多余的选项可用,一键加密后被硕思搞定了。

解密:
Sothink SWF Decompiler:老牌的SWF破解工具,最新版本破解的能力还是非常强大,唯一不好地方就是加密工具注入随机代码后会导致崩溃,其他都能应付自如。
SWiX:通过XML的形式看FLASH,也可以直接进行修改,前提是你要看得懂。。。可以用这款软件查看或修改一些诸如帧率、颜色等常规,容易的内容。
AVR:也是满老的一个工具,破解的能力比硕思弱很多,不过多一个工具多一条路,硕思不行的时候可以用它试试。

Flash解析带命名空间XML的问题

问题描述:Hennessy项目,在Flash中调用Linq通过WebService返回的数据时,用AS3中E4X语法失败。只有使用AS2中.children()[0]的写法才能访问到数据。

问题分析:删除XML命名空间后,可以使用E4X语法。即在附中XML中删除:xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"

问题解决:在Linq中没有找到可以配置命名空间,所以只有在Flash端做处理,有如下几种解决方案:
1.删除所有命名空间,通过E4X语法或者正则表达式删除,操作起来比较麻烦
2.默认命名空间指定为空命名空间,default xml namespace=new Namespace("");,可能会遇到#1025错误,不知道怎么解决,可能是Flash的bug
3.使用带命名空间的E4X语法,所有字段前需加,namespace::,代码太繁琐

附:
<?
xml version="1.0" encoding="utf-8" ?>
<ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
......
</ArrayOfUserInfo>

PV3D基础入门教程

官方网站:http://pv3d.org/

官方演示:http://www.papervision3d.org/

官方论坛:http://forum.papervision3d.org/

达达的教程:
Papervision3D入门第1步:http://www.unbe.cn/blog/?p=306
Papervision3D入门第2步:http://www.unbe.cn/blog/?p=310
Papervision3D入门第3步:http://www.unbe.cn/blog/?p=320
Papervision3D入门第4步:http://www.unbe.cn/blog/?p=321
Papervision3D入门第5步:http://www.unbe.cn/blog/?p=325
Papervision3D入门第6步:http://www.unbe.cn/blog/?p=385

爱好的教程:
第一课:关于 Papervision 3D:http://blog.sina.com.cn/s/blog_49b35d540100a0ef.html
第二课:三种IDE创建Papervision 3D文件:http://blog.sina.com.cn/s/blog_49b35d540100a0hu.html
第三课:创建第一个Papervision 3D文件:http://blog.sina.com.cn/s/blog_49b35d540100a0w3.html
第四课:一个旋转圆锥体效果:http://blog.sina.com.cn/s/blog_49b35d540100a0wr.html
第五课:一个旋转球体效果:http://blog.sina.com.cn/s/blog_49b35d540100a212.html
第六课:深入研究Papervision3D自定义类--PaperBase:http://blog.sina.com.cn/s/blog_49b35d540100a2r9.html
第七课:Papervision3D贴图基础:http://blog.sina.com.cn/s/blog_49b35d540100a2rx.html
第八课:使用复杂模型贴图:http://blog.sina.com.cn/s/blog_49b35d540100a2yd.html
第九课:3D鼠标交互效果:http://blog.sina.com.cn/s/blog_49b35d540100a3ht.html
第十课:3D键盘交互效果:http://blog.sina.com.cn/s/blog_49b35d540100a3yu.html
第十一课:基本3D交互场景事件:http://blog.sina.com.cn/s/blog_49b35d540100a54p.html
第十二课:高级3D交互场景事件(一):http://blog.sina.com.cn/s/blog_49b35d540100a5vd.html

如果用PV3D组件开发,可以参考教程:http://hi.baidu.com/acumagic/blog/item/9fefca1fc7405d08304e15d7.html