伊莉討論區

標題: as3 關於gotoAndStop()的效能問題 [打印本頁]

作者: 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[i] = new Array(); //將其宣告為二維陣列
        for(var j=0; j<20; j++)
        {
                var block:_Block = new _Block();   //踩地雷中的方格物件

                blockArray[i][j] = block;

                stage.addChildAt(blockArray[i][j],0);
         }
}

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

               blockArray[i][j].gotoAndStop(2);

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

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

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








歡迎光臨 伊莉討論區 (http://a407.file-static.com/) Powered by Discuz!