2011-12-21 8 views
0

表示されます。私は、私が書き込む主要な計算の前に計算が終了するまで、画面に「読み込み中」を表示したい。ロード表示は文句を言わないあなたが見てみたい場合、私は、AS3でこれをFlashアプリケーションを書いている

loadingText.visible = true 

とした後、私は

loadingText.visible = false 

を書くが、何も表示されません。私が正しく理解していれば変更は計算が終了し、したがって、その可視と不可視のバックに戻って再び 取得だけにして変更を適用しているときにのみ作られています。 これを回避する方法はありますか?ここで

は関数です: solveRecが重い計算

ある

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 

+0

可視性を設定しているときに何が起こっているのかについての洞察を得ることができるでしょうか –

答えて

1

あなたの計算は長いフレームリフレッシュ間隔以上かかる場合は、操作が完了するまで、画面がフリーズします。計算をフレーム以上に広げなければなりません。次に、クリップを可視と不可視に設定すると、実際にいくつかの結果が表示されます。

チェックアウトPseudothreads長い計算をかなりの部分に分割し、Flash Playerが画面を適時に再描画するのに十分な処理能力を残しておくのは、きちんとした使い方です。

+0

もう一つの提案ははるかに簡単です.. ..ありがとう – Yosefki

+0

自分で調整する;) – weltraumpirat

1

問題は、あなたが計算と同じフレームでの視認性のトグルをやっているかもしれません。

だから基本的に、あなたはおそらく何をしているか、このです:

  1. ボタンが
  2. loadingText.visible = true;
  3. 重い計算
  4. loadingText.visible = false;
  5. フレームがここでの問題がある

をレンダリングクリックそれはあなた非同期操作(コンテンツの読み込みなど)とは異なり、計算が終了するまで待つ必要があります。計算を開始するまで、フレームを待つことでこれを回避できます。簡単にするために、loadingText.visibleは、計算の必要性を示すフラグであり、フレームごとにチェックされます。 をレンダリングif(loadingText.visible)

  • 重い計算に
  • loadingText.visible = false;
  • をチェックフレーム:

    1. ボタンがレンダリング
    2. loadingText.visible = true;
    3. フレームをクリックし、積載テキストが枠に入るようになりまし
    4. 見えます

      結果を計算しながら、あなたはまだ何もすることはできません。つまり、読み込み中のテキストを表示することはできますが、読み込み中のバーや回転円を表示することはできません。そのためには、より高度な手法を使用して、フレームごとにそのフレームの一部のみを計算することによって、複数のフレームにわたって計算全体を分割する必要があります。

      あなたはこのような機能を分割することができます:

      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:INT、solutionNumber:INT):配列 \t \t \t \t \t \tトレース() "女王で解決始めます"。 \t \t \t loadingText.visible = true; \t \t \tトレース(「読み込みが可視に設定」)。 \t \t \t solutionNumDes ++; \t \t \t solutionNumCounter = solutionNumDes;用 \t \t \t(VAR I:INT = 0; I <_size; iは++) \t \t \t \t溶液を[I] = 0; \t \t \t \t \t \t \t resetBoard(); \t \t \t(solveRec(0)) \t \t \t \tディスプレイ(IF)。 \t \t \tトレース(「ローディングセットは表示されません」)。 \t \t \t loadingText.visible = false; \t \t \tトレース(「クイーンズタウンで解決済み」); \t \t} //解決する – Yosefki

    +0

    ああ..これは読めません...私は機能コード – Yosefki

    +0

    を投稿しました。次のフレームに重い計算をするのですか? – Yosefki

    関連する問題