私はゲームの各フレームを長方形の線で描いています。これは古い学校のハンドヘルド電子ゲームのレクリエーションです。主なゲームのための粗いドットマトリックスとテキストやいくつかの画像のカスタム画像を表示したもの。多くのプリミティブを使用してAndroid Canvasでゲームを描く方法
仮想ドットマトリックス画面に20x20の大きな「ピクセル」があります。また、画面上に7セグメントのディスプレイやその他のものを描画します。
TraceViewによると、多すぎるものがあるので、ほとんどの時間はdrawLineとdrawRectangleメソッドで費やされます。私はドットマトリックスディスプレイの各ピクセルを描画し、の各セグメントに7セグメント表示の各セグメントを描画します。フレームごとに描画します。
最適化が私の頭に浮かびました。変更されたピクセル/セグメントのみを再描画するので、以前のピクセル/セグメントの状態を保存し、変更されたピクセル/セグメントを再描画しようとしました。基本的にそれは原油の無効化です。
私が期待していた動作は、最後のフレームがペイントされた後にキャンバスがそのまま残っていて、必要なものだけを再描画することでした。
私のキャンバスは黒くちらつき、画面の状態が変わったときに、ドットマトリックスの表示/セグメントのピクセルだけがフレームに点滅していました。私はキャンバスをクリアしていないことを確認しました。
私はLunar Lander Androidサンプルで説明されているように、SurfaceView内のCanvasで描画しています。スレッドを更新しています。 Lunar Landerサンプルでは、各フレームのすべてを再ペイントします。
多分、最初のフレームですべてをビットマップにレンダリングし、その後、そのフレームごとにビットマップを更新できますか?
paint()メソッドにはどのテクニックを使用しますか?
ドットマトリックスのすべてのピクセルを描画するための駆動要件は何ですか?なぜイメージファイルを作成し、それを画面に描画しないのですか? – user432209
画面上に20x20ピクセルの配列があり、これをオンまたはオフにすることができます。長方形を塗りつぶしたり、スプライトを描画したりする場合は同じです。 – Axarydax
SurfaceHolder.unlockCanvasAndPost()がキャンバスをクリアしているようです。 – Axarydax