從基測考完之後就一直在做一樣東西,就是翻頁電子書按此進入(不重要),發現很詭異的Bug,初步推斷應該不是我的錯,而是Flash Player的問題。這個project使我對移動或排列螢幕物件更熟練了,但全螢幕的功能卻使的這些排列陷入困境!! 既然這樣,我就勉強拍個幾張未完成的圖,紀錄Bug的出現原因。
程式原始檔
很顯然,協作平台那個程式就是有Bug的0.6Beta2:按這裡下載 (更不重要)
Bug重現步驟
好,就如同插圖裡的文字:問題出在於全螢幕之間的切換問題。
將Bug的程式碼區段改寫之後,可以做出像下面這個程式(附原始檔)。
http://www.box.net/shared/6bbk3hsuei2rb5onr3ur
Bug研究
看起來是個有趣的測試,原始的舞台大小是300x400。為了避免文字跑太快觀察不清楚,我把fps調到5(=1秒5次偵測)。
提醒:點開看原始圖片中的文字 |
大驚!數字歸零! |
//原始狀態
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) { //加入程式碼(記得用取代功能修改舞台的參數) }
* 全文完 *
沒有留言:
張貼留言