查看完整版本: as3 關於gotoAndStop()的效能問題
頁: [1]

brucejwo 發表於 2012-7-5 11:13 AM

as3 關於gotoAndStop()的效能問題

我最近再用Flash as3寫一個踩地雷的遊戲
基本寫法是用一個方格的物件排列起來,加入滑鼠點擊的監聽
在展開沒有炸彈的範圍部分(周圍都沒有炸彈的話會自動把周圍的格子都開起來),我原本也是用遞迴的寫法
但發現效能非常之差,當要開的格數一多,在點擊下去之後便會延遲數秒

我原本以為是因為遞迴本身效能差的緣故,所以我後來試著換了幾種寫法
像是預先算好空白沒炸彈的區域,給他上個編號,這樣一但需要開啟這部分區域時就可以直接把同編號的打開

但問題來了,即使我這麼做也沒辦法提升效率@@

幾經測試後我發現似乎是gotoAndStop這個方法的問題!?

我的方格物件是第一影格是平常的狀態,第二影格是被打開的狀態...etc
所以格子被點開就是切換到第二個影格(block.gotoAndStop(2))

當場景上有多達幾百個物件同時要切到第二影格時,就開始lag了....
我後來做了如下的測試

//這邊先宣告一個二維陣列存放方格物件
var blockArray:Array = new Array();

for(var i=0; i<20; i++)
{
        blockArray = new Array(); //將其宣告為二維陣列
        for(var j=0; j<20; j++)
        {
                var block:_Block = new _Block();   //踩地雷中的方格物件

                blockArray = block;

                stage.addChildAt(blockArray,0);
         }
}

//把每個方格都移到第二影格
for(var i=0; i<20; i++)
        for(var j=0; j<20; j++)

               blockArray.gotoAndStop(2);

↑就是這個步驟,就會讓程式延遲好久

當然這段程式碼省略了很多跟問題無關的東西(像是格子的排列和座標等)純粹只為測試
我主要的問題就是.......

原來gotoAndStop(),切換影格是一個這麼吃效能的動作嗎???
如果真是如此,那我要寫個踩地雷遊戲有什麼好方法來提升效能嗎?



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>
頁: [1]