2011-12-21 55 views
0

我正在寫一個flash應用程序使用AS3,這一個,如果你想看看:http://www.kongregate.com/games/yossefki/nqueensolver加載顯示不會出現

這個應用做了一些極端的計算需要時間。我想在屏幕上顯示「加載」,直到計算完成,然後再寫入主要計算。

loadingText.visible = true 

後,我寫

loadingText.visible = false 

,但不顯示任何內容。如果我理解正確,只有在計算完成後才能進行更改,因此只有在應用更改後才能看到並回到不可見狀態 。 有沒有辦法解決它?

下面是函數:

public function solve():void{ 
    //sizeOfBoard:int , solutionNumber:int):Array 

    trace("start solving at queens"); 
    loadingText.visible = true; 
    trace("loading set to visible"); 
    solutionNumDes++; 
    solutionNumCounter = solutionNumDes; 
    for(var i:int=0;i<_size;i++) 
     solution[i] = 0; 

    resetBoard(); 
    if(solveRec(0)) 
     display(); 
    trace("loading set to unvisible"); 
    loadingText.visible = false; 
    trace("finised solving at queens"); 

}//solve 

其中solveRec是重計算

+0

你可能會發布你的班級的代碼,所以我們可以得到一個洞察,當你設置可見性時還會發生什麼 – 2011-12-21 21:40:33

回答

1

如果你的計算時間比幀刷新間隔時間越長,屏幕會凍結,直到操作完成。您必須將計算結果分散到多個框架中,然後將剪輯設置爲可見和不可見將顯示一些結果。

結賬Pseudothreads。將長時間計算劃分爲相當大的部分併爲Flash Player留出足夠的處理能力以及時重新繪製屏幕是一種簡潔而實用的方法。

+0

其他的建議是更容易我..謝謝你 – Yosefki 2011-12-21 22:18:40

+0

適合自己;) – weltraumpirat 2011-12-21 22:21:02

1

的問題可能是你正在做的計算,並在同一幀的知名度切換。

所以基本上你可能在做什麼是這樣的:

  1. 按鈕單擊了
  2. loadingText.visible = true;
  3. 重計算
  4. loadingText.visible = false;
  5. 幀渲染

在這裏的問題是那你和加載內容一樣,你必須等待計算結束。在開始計算之前,您可以通過等待框架來避免這種情況。爲了簡單起見,loadingText.visible可能是一個標誌,表明需要進行計算,這將在每一幀進行檢查。

  1. 按鈕點擊
  2. loadingText.visible = true;
  3. 幀渲染,加載文本上輸入框現在
  4. 可見:檢查if(loadingText.visible)
  5. 重計算
  6. loadingText.visible = false;
  7. 渲染幀

在計算結果時,你仍然無能爲力。這意味着顯示一個加載文本的作品,但你不能有一個花式加載欄或旋轉圓圈。要做到這一點,您需要使用更先進的技術,通過在每個幀中僅計算一部分幀來將整個計算分割爲多個幀。

您可以分割的功能是這樣的:

private function solveButtonClicked():void { 
    loadingText.visible = true; 
} 

private function enterFrame(e:Event):void { 
    if(loadingText.visible) solve(); 
} 

private function solve():void { 

    solutionNumDes++; 
    solutionNumCounter = solutionNumDes; 
    for(var i:int=0;i<_size;i++) 
     solution[i] = 0; 

    resetBoard(); 
    if(solveRec(0)) 
     display(); 
    trace("loading set to unvisible"); 
    loadingText.visible = false; 
    trace("finised solving at queens"); 

}//solve 
+0

我不明白我該怎麼做...這是我工作的功能在\t \t公共函數解決():無效{ \t \t \t // sizeOfBoard:整型,solutionNumber:INT):數組 \t \t \t \t \t \t跡( 「開始於王后解決」); \t \t \t loadingText.visible = true; (「加載設置爲可見」); \t \t \t solutionNumDes ++; \t \t \t solutionNumCounter = solutionNumDes; \t \t \t爲(VAR我:= 0;我<_size;我++) \t \t \t \t溶液[I] = 0; \t \t \t \t \t \t \t resetBoard(); \t \t \t如果(solveRec(0)) \t \t \t \t顯示(); (「加載設置爲不可見」); \t \t \t loadingText.visible = false; \t \t \t跟蹤(「finfinised解決在皇后」); \t \t} //解決 – Yosefki 2011-12-21 21:57:42

+0

哦..這是不可讀的...我發佈了功能代碼 – Yosefki 2011-12-21 22:00:40

+0

你是不是認爲..把重計算推遲到下一幀? – Yosefki 2011-12-21 22:02:13