2017-02-11 11 views
0

フレームレートの速度を必要としない簡単なAndroidゲームを構築しています。シンプルなチェスゲームと考えてください。キャンバスが単純なAndroidゲームでUI遅れを起こす

私はonDraw()を使用してゲーム全体を描画するカスタムビューを作成しました:

public class GameView extends View { 
    public GameView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     ... 
    } 
    protected void onDraw(Canvas canvas) { 
     ... 
    } 
} 

は現在試作段階では、私はちょうど任意のビットマップの線、円、四角形を描画しますが、いませんよ。

私は、プレーヤーがinvalidate()(1人の移動につき1フレームだけ)を使用して移動するたびに描画します。

問題は、ビューが既に描画されているときに、たとえばユーザーにダイアログまたはトーストを表示しているときに、ユーザーインターフェイスでフレームレートの低下が発生したことに気付きました。私が描いている瞬間ではなく、すでにビューが描画されているときに起こっていることです。

これは変ですね。ビューは既に描画されているので、ユーザーインターフェイスでこのような待ち時間が発生するのはなぜですか?

答えて

0

私はあなたが探しているかもしれないSurfaceViewを見てみるべきだと思います。

ビューは、すべてのユーザー操作にも使用される同じGUIスレッドで描画されます。

したがって、SurfaceViewを使用する必要があります。実際にはキャンバスに描画するために専用のスレッドが使用されます。

私もお勧めしますDifference between SurfaceView and View?

+0

ありがとう、私はそれを試してみます。私は公式のドキュメンテーションを読んだところ、「あなたのアプリケーションがかなりの量の処理速度やフレームレート(おそらくチェスゲーム、スネークゲーム、またはゆっくりアニメーション化されたアプリケーション)を必要としないならば、カスタムViewコンポーネントの作成を検討してください。なぜ公式ドキュメントがSurfaceViewの代わりにカスタムビューを提案するのですか? SurfaceViewの使用には何らかの欠点がありますか? – MScott

+0

さて、SurfaceViewの使用にはいくつかの問題があります。 キャンバスに描画するために別のスレッドを使用する利点がありますが、ハードウェアアクセラレーションを使用する利点はありません。 これまで議論されていた話題です。あなたがチェックアウトすることをお勧めします。私の答えを正しいものとして確認してください。 :) http://stackoverflow.com/a/15995353/1928275 – Firecat

+1

OpenGL ESはすべてのソリューションの中で最も良いと思いますか? – MScott

関連する問題