最近在 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 問題





