2014年2月14日 星期五

Zinc 全螢幕功能需要注意的地方

Flash 可以輸出成為執行檔,不依靠 flash player 直接在作業系統中執行。另一種角度來說,就像是把自己寫的程式和 flash player 包在一起。成為執行檔可以打開一些限制,像是能夠同時讀取本機與網路上的資料,或是執行系統命令。不過本來就沒有的寫入檔案功能,並不會因此冒出來。

全螢幕的功能,就是變成執行檔可以使用的功能之一。

在 MDM Zinc 裡,猜想是因為帶入的多視窗的概念,導致既有的方法失效,需要用它所提供 Forms 的方法來達到視窗的最大化、最小化、還原。最大化和全螢幕不同,全螢幕的狀態會把系統工具列、 Dock 等也一併隱藏。

使用 Zinc 開發的專案,很早就發現一個狀況,就是全螢幕的功能正常,但是取消全螢幕的功能卻時好時壞,系統工具列在取消的同時出現,但是程式並沒有回到原來視窗的狀態,還是維持全螢幕的大小,只是上頭多出現了系統工具列。一直到最近才找到時間去研究這個問題。

一開始沒有想到的 Zinc 程式本身的問題,一路查找既有的 ActionScript 是不是造成物件重複産生,或是變數被蓋掉的等問題。修修改改了幾個小時之後,問題並沒有解決,最後才發現在其中一支 swf 第二次載入之後問題才發生,依設計,載入時都要以全螢幕模式顯示。

因此這支程式被載入後,都會執行一次全螢幕指令,沒料到第二次執行卻造成無法成功解除全螢幕狀況的問題。把這段程式註解掉之後,全螢幕的程式就恢復正常,只有在連續按兩次全螢幕按鈕後,程式才會出錯。

因此知道了 Zinc 的全螢幕指令,在還原視窗狀態前只能被執行一次,因此必須加寫判斷來避免。找到了問題,就可以開始作相對應的修改…

由於在 Zinc 的機制中,全螢幕的狀態不會因為載入 swf 而改變,所以全螢幕的狀態必須的被記錄下來。本來想利用 Zinc 取得屬性的方法來判定狀態,但是找不到合用的,所以改使用 _global 變數來記錄,利用了 _global.isFullScreen:Boolean 來記錄,當要執行全螢幕就必須為 false, 反之則必須為 true,來避免同樣的指令被執行兩次。

如此,問題才被解決。等在我後面的是七隻類似的專案要作一樣的修改…(汗)

本來以為 Zinc 這個出現已久的框架應該不會出這種小問題才是,沒想到居然讓我遇到了。

沒有留言:

張貼留言