OTHER PAGES

WELCOME

Move your mouse onto the image to see the bravo CSS3 Transition!

2011年7月3日 星期日

[AS2]全螢幕時Stage大小無法使用

前言
從基測考完之後就一直在做一樣東西,就是翻頁電子書按此進入(不重要),發現很詭異的Bug,初步推斷應該不是我的錯,而是Flash Player的問題。這個project使我對移動或排列螢幕物件更熟練了,但全螢幕的功能卻使的這些排列陷入困境!! 既然這樣,我就勉強拍個幾張未完成的圖,紀錄Bug的出現原因。

程式原始檔
很顯然,協作平台那個程式就是有Bug的0.6Beta2:按這裡下載 (更不重要)

Bug重現步驟
  1.  首先,按全螢幕鈕:
  2. 接著,視窗化(此時視窗的大小已經有問題了)
  3. 視窗化之後按'原始大小'按鈕。
  4. 接著調回來。
  5. 最後就可以看到這個靈異畫面
好,就如同插圖裡的文字:問題出在於全螢幕之間的切換問題。
將Bug的程式碼區段改寫之後,可以做出像下面這個程式(附原始檔)。
http://www.box.net/shared/6bbk3hsuei2rb5onr3ur

Bug研究
看起來是個有趣的測試,原始的舞台大小是300x400。為了避免文字跑太快觀察不清楚,我把fps調到5(=1秒5次偵測)。


提醒:點開看原始圖片中的文字
大驚!數字歸零!
之後,點上面大大的Toggle Screen,就出現如左內容,再點回來,完整測試一次,發現問題出現。下面是我貼出部分內容。

 //原始狀態
 Timer: 223
  Stage.width= 300, Stage.height= 400

Timer: 433
  Stage.width= 300, Stage.height= 400

Timer: 622
  Stage.width= 300, Stage.height= 400

------------------------------------------------//省略

Timer: 4823
  Stage.width= 300, Stage.height= 400

Timer: 5023
  Stage.width= 300, Stage.height= 400

Timer: 5223
  Stage.width= 300, Stage.height= 400


//全螢幕開始,注意到舞台大小沒有異狀
 

Timer: 5512
  Stage.width= 1366, Stage.height= 768

Timer: 5623
  Stage.width= 1366, Stage.height= 768

Timer: 5823
  Stage.width= 1366, Stage.height= 768

Timer: 6023
  Stage.width= 1366, Stage.height= 768



------------------------------------------------//省略
 Timer: 8424
  Stage.width= 1366, Stage.height= 768

Timer: 8624
  Stage.width= 1366, Stage.height= 768



//切回視窗化,大小就歸零

Timer: 8824
  Stage.width= 0, Stage.height= 0

Timer: 9024
  Stage.width= 0, Stage.height= 0

Timer: 9224
  Stage.width= 0, Stage.height= 0
------------------------------------------------//省略

Timer: 12224
  Stage.width= 0, Stage.height= 0

Timer: 12424
  Stage.width= 0, Stage.height= 0


//改變視窗大小,屬性又恢復正常!
 

Timer: 12626
  Stage.width= 332, Stage.height= 425

Timer: 12827
  Stage.width= 368, Stage.height= 444

Timer: 13028
  Stage.width= 393, Stage.height= 457

Timer: 13226
  Stage.width= 425, Stage.height= 473

Timer: 13424
  Stage.width= 452, Stage.height= 485

Timer: 13625
  Stage.width= 453, Stage.height= 485

Timer: 13828
  Stage.width= 432, Stage.height= 474
//測試結束





答案浮現。在全螢幕切回視窗化的這一段,如果沒有人為改變舞台大小,寬跟高無法偵測...這......忍不住要問一下,究竟為什麼?

解決之道
(哇...這篇文章好長喔!)
幸好...幸好!在撰寫與測試的過程中,這個問題顯然已經被破解,關鍵在於:全螢幕之前與之後的舞台大小是相等的!所以,在呼叫全螢幕之前需要加上如下程式碼:(AS2)
//全螢幕之前加入這兩行
var init_width:Number=Stage.width;
var init_height:Number=Stage.height;
//然後啟用
fscommand("fullscreen",true);

有用到舞台大小的地方加上如下程式碼:(AS2)
//只要兩者任一者為零,就用init_width.init_height當作舞台的寬與高
if (Stage.width*Stage.height==0) {
//加入程式碼(記得用取代功能修改舞台的參數)
}

* 全文完 *
張貼留言