最近在 review 一年半以前发现的技巧时
『利用 window.prompt 解决 Flash 透明模式下无法输入中文的问题』
又有了新的发现
透过 ExternalInterface 调用 window.prompt 时
完全是同步的
在浏览器对话框关闭以前
Flash Movie 就像是被暂停了一样
忽然想到 Flash ActionScript 到现在没有直接提供过全面暂停的功能
(PS. Flash Player 9 debug 版可以使用 flash.system.System.pause(); 暂停)
不光是只调用 _root.stop(); 那样
要连 _root 下面所有子 MovieClip 也一并暂停啊
于是更进一步测试
发现透过 ExternalInterface 调用 JavaScript alert, prompt, confirm 时
能够将 Flash Player 几乎全面暂停
能够暂停的项目:
- MovieClip Timeline
- Video play head
- Timer, setInterval, setTimeout
- for, while 回圈
- 影格上的 Stream Sound
无法暂停的项目:
- Event Sound, 串流下载播放的 Sound
- Network Activity
这样一来就很方便了
除了声音对象要自行暂停以外
几乎大部分 Flash Player 内的活动都能够用 ExternalInterface 加以暂停
而且会比自行实作的更省效能
因为它连回圈, Timer 都停住了
其实已经很接近运行绪 (Threading) 的睡眠 (sleep) 功能
声音播放、网络活动等之所以无法暂停
原因可能与 Flash Player 内部运行绪配置方式有关
声音播放、网络活动都是非同步的
很可能是在主运行绪之外配置了副运行绪来处理的
未来 Flash Player 可能会支持运行绪的功能
在那之前,就先用这个小技巧
暂停 Flash Player 主运行绪吧!
ActionScript 测试程序:
import flash.external.*;
function doPause() {
trace("Before call alert.");
ExternalInterface.call("alert", "Flash Movie 已暂停, 按下确定继续");
trace("After call alert.");
}
setInterval(function(){trace("onTimer: " + getTimer());}, 1000);
// Ticore's Blog - http://ticore.blogspot.com/
相关连结:
利用 window.prompt 解决 Flash 透明模式下无法输入中文的问题
PS. 上述功能主要是以 AS2.0 测试的
后来邦邦告知可能会引发 Script Timeout 问题
测试之后发现 AS3.0 上运行类似的动作
只要 JS Alert, Prompt 对话框超过默认 15 秒没有关闭
便会引发 Script Timeout 问题




