Flash全屏输入文本框不能输入问题

问题描述:最近做AMG多触点程序,遇到flash全屏后文本框不能输入问题。flash10,用swf全屏后可以输入;用exe全屏后不能输入。air2,用exe全屏可以输入。

问题解决:Google了下:

在全屏模式下,用户无法在文本输入字段中输入文本。所有键盘输入和键盘相关的 ActionScript 在全屏模式下均会被禁用,但将应用程序返回标准模式的键盘快捷键(例如按 Esc)除外。

http://livedocs.adobe.com/flash/9.0_cn/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000352.html

CS5中Flash 10的flash.events.TouchEvent

问题描述:今天做AMG的时候以前的代码运行出现错误:TypeError: Error #2007: 参数 type 不能为空。

问题分析:仔细检查报错信息,发现是flash.events.TouchEvent.MOUSE_MOVE为undefined。原来是CS5的Flash 10中加入了flash.events.TouchEvent类,导致于原来冲突。

问题解决:把以前的类改到flash.tuio包里就可以了。

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

关于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/

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

Google Analytics在SWFAddress下检测不完整的问题

问题描述:
denizen中国站:http://cn.denizen.com/denizen-china/#/home
Google分析只能追踪到/denizen-china/,#符号后面都追踪不到。

问题分析与解决:
追踪代码是放在</body>标记前,代码如下:

<script type="text/javascript">

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-18173256-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? ' https://ssl' : ' http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>

因为位置比较靠后,可能和其他js有冲突,所以把这段追踪代码提到最前。
发现还是不行,把

_gaq.push(['_trackPageview']);

改为

_gaq.push(['_trackPageview', document.location.pathname + document.location.hash.replace("#/","")]);

还可以把

<script type="text/javascript" src="js/swfaddress.js"></script>

改为

<script type="text/javascript" src="js/swfaddress.js?tracker=pageTracker._trackPageview"></script>

大功告成。