正在幫客戶做的一個小遊戲, 原本一個很簡單的 Fullscreen 功能搞得我叫苦連天.
由於非常的不合理, 我們從基本的思路開始說述起.
首先來 谷高(Google)一下坊間的程式碼,
[code lang=”AS3″]
public function main(){
// 初始化
stage.scaleMode = StageScaleMode.SHOW_ALL;
stage.align = StageAlign.TOP_LEFT;
// 其他的 xxxbutton.addEventListener(MouseEvent.CLICK, toggleScreen);
}//fn
public function toggleScreen(e:MouseEvent):void{
trace("current stats : "+ stage.displayState);
if (stage.displayState == StageDisplayState.FULL_SCREEN) {
stage.displayState=StageDisplayState.NORMAL;
} else {
stage.displayState=StageDisplayState.FULL_SCREEN;
}//if
}//fn
[/code]
好罷!! 看起來非常簡單對不?
那接下來, 運行一下…. 沒反應啊…..
查看 trace 的時候竟然發現 current stats : null ….
那意思就是說 stage.displayState 跟本是 null 嘛, 不論 assign 前後也一樣….
這不是 Bug 嗎??
再仔細的研究…..接下來的時候, 總會有高人(身高?),他們會告訴你.
要在 HTML 裡加上 allowFullscreen=true;…. 喵的早就加了
一開始就在用 swfObject.js 來弄這個東東.
而且也有老外在說同一個問題, stage = null.
也給出一些思路, 例如 static stage:Stage = this.stage; 等等的 override 系統的不良寫法..
總之今天是沒戲的了..
16 小時後(第二天)
嗯!反正也沒別的辦法試試用 HTML 的寫法來試試.
[html]
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,18,0"
width="600" height="450" id="fullscreen" align="middle">
<param name="allowFullScreen" value="true" />
<param name="movie" value="testGame.swf" />
<param name="bgcolor" value="#333333" />
<embed src="testGame.swf" allowFullScreen="true" bgcolor="#333333" width="600" height="450"
name="fullscreen" align="middle" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
[/html]
又來試試看罷…
果然用 swfObject 跟 HTML 是沒關係的…仍然不能 Fullscreen.
在 38 小時的憤戰+丟東西+借Game消仇後..
我再抱著想丟電腦的衝動來作最後努力…..
打開 Flash 本身的 “發佈”功能….
完全依照初學者的腳步……使用發佈功能導出那篇又長又臭的 HTML Code… 在做到其中一步的時候.
終於……………找到因由了.
“解決方案”
翻到 “發佈設定>HTML>範本 = 僅適用於 Flash -允許全螢幕”
是的你沒看錯…這個就是本案導致 Flash 不能 fullscreen 的兇手…
不論你是不是使用 Flash 來進行發佈, 這個選項一定要勾選, 那個 stage.displayState 才能正常使用, 如果沒有勾選則被 奧多比(Adobe) 關掉變為 永遠是 null 的咀咒…
(偽)結論: 奧多比(Adobe) 不知道那幾個腦殘在想, 如果隨便給Dev使用 Fullscreen 可能會道致有惡意程式的出現,
於是把執行本功能的 API隔離了, 可是沒有告訴寫 用家手冊的團隊..
總之事情其實是 奧多比(Adobe) 的“白痴”所引致的。
(喵的, 我可是在英文版裡看了整個下午,要不是youtube可以fullscreen, 我基本懷疑本功能是不是廢掉了.)
正在幫客戶做的一個小遊戲, 原本一個很簡單的 Fullscreen 功能搞得我叫苦連天.
由於非常的不合理, 我們從基本的思路開始說述起.
首先來 谷高(Google)一下坊間的程式碼,
[code lang=”AS3″]
public function main(){
// 初始化
stage.scaleMode = StageScaleMode.SHOW_ALL;
stage.align = StageAlign.TOP_LEFT;
// 其他的 xxxbutton.addEventListener(MouseEvent.CLICK, toggleScreen);
}//fn
public function toggleScreen(e:MouseEvent):void{
trace("current stats : "+ stage.displayState);
if (stage.displayState == StageDisplayState.FULL_SCREEN) {
stage.displayState=StageDisplayState.NORMAL;
} else {
stage.displayState=StageDisplayState.FULL_SCREEN;
}//if
}//fn
[/code]
好罷!! 看起來非常簡單對不?
那接下來, 運行一下…. 沒反應啊…..
查看 trace 的時候竟然發現 current stats : null ….
那意思就是說 stage.displayState 跟本是 null 嘛, 不論 assign 前後也一樣….
這不是 Bug 嗎??
再仔細的研究…..接下來的時候, 總會有高人(身高?),他們會告訴你.
要在 HTML 裡加上 allowFullscreen=true;…. 喵的早就加了
一開始就在用 swfObject.js 來弄這個東東.
而且也有老外在說同一個問題, stage = null.
也給出一些思路, 例如 static stage:Stage = this.stage; 等等的 override 系統的不良寫法..
總之今天是沒戲的了..
16 小時後(第二天)
嗯!反正也沒別的辦法試試用 HTML 的寫法來試試.
[html]
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,18,0"
width="600" height="450" id="fullscreen" align="middle">
<param name="allowFullScreen" value="true" />
<param name="movie" value="testGame.swf" />
<param name="bgcolor" value="#333333" />
<embed src="testGame.swf" allowFullScreen="true" bgcolor="#333333" width="600" height="450"
name="fullscreen" align="middle" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
[/html]
又來試試看罷…
果然用 swfObject 跟 HTML 是沒關係的…仍然不能 Fullscreen.
在 38 小時的憤戰+丟東西+借Game消仇後..
我再抱著想丟電腦的衝動來作最後努力…..
打開 Flash 本身的 “發佈”功能….
完全依照初學者的腳步……使用發佈功能導出那篇又長又臭的 HTML Code… 在做到其中一步的時候.
終於……………找到因由了.
“解決方案”
翻到 “發佈設定>HTML>範本 = 僅適用於 Flash -允許全螢幕”
是的你沒看錯…這個就是本案導致 Flash 不能 fullscreen 的兇手…
不論你是不是使用 Flash 來進行發佈, 這個選項一定要勾選, 那個 stage.displayState 才能正常使用, 如果沒有勾選則被 奧多比(Adobe) 關掉變為 永遠是 null 的咀咒…
(偽)結論: 奧多比(Adobe) 不知道那幾個腦殘在想, 如果隨便給Dev使用 Fullscreen 可能會道致有惡意程式的出現,
於是把執行本功能的 API隔離了, 可是沒有告訴寫 用家手冊的團隊..
總之事情其實是 奧多比(Adobe) 的“白痴”所引致的。
(喵的, 我可是在英文版裡看了整個下午,要不是youtube可以fullscreen, 我基本懷疑本功能是不是廢掉了.)
補圖一張:
![adobe_as3_fullscreen_fix](https://www.clonefactor.com/wordpress/wp-content/uploads/2010/10/adobe_as3_fullscreen_fix1-196x300.gif)
補充: 果然… 用回 swfObject 也可以達成 Fullscreen 效果,
根本與使用 object, embred, stage, Stage 等等完全無關. 真是靠他媽的奧多比,吃x去罷.