4

ゲームループを設定しています。ループは 50 FPS で更新するように設定されています。現在、アプリが実行する唯一のアクションは、タッチ イベントに応答して画面座標を描画することです。最初は、新しいタッチ イベントのみを描画するように描画機能を設定しました。これにより、テキストが点滅しました。複数のタッチ イベントが異なるタイミングで点滅するため、Canvas はバックグラウンドで複数のページを使用していると思われます。これを回避するために、発生したすべてのタッチ イベントのリストを作成し、ドロー コールごとにリスト全体を再描画しました。

間違っている場合は訂正してください。lockCanvas()/unlockCanvasAndPost() 呼び出しは、本質的にバックバッファ スワップです。ロックとロック解除に関するドキュメントを読むと、lockCanvas(Rect dirty) を使用しない限り、呼び出しの間にシーン全体を再描画する必要があるように思えます。この場合、外側の領域を保持したまま、ダーティな rect 領域を再描画する必要があります。

サーフェスのコンテンツは、unlockCanvas() と lockCanvas() の間で保持されることはありません。このため、サーフェス領域内のすべてのピクセルを書き込む必要があります。このルールの唯一の例外は、ダーティな四角形が指定された場合です。この場合、ダーティでないピクセルが保持されます。

自分の質問に答えたように聞こえますが、ドキュメントによると、Surface は呼び出し間で保持されることはありません。ただし、これは私の最初の実装の動作を説明していません。つまり、画面をタップするとテキストが点滅し始めました。テキストを 1 回だけ描画したので、これは、drawText() 呼び出しを取得しなかった「バックバッファー」と、破棄されなかった元の Surface へのスワップが原因で点滅していることを意味しますが、おそらく考慮される必要があります。信頼できない。

では、質問: 各描画呼び出しですべてのオブジェクトを再描画する必要がありますか? もしそうなら、キャンバスを「クリア」するか、少なくとも背景画像も再描画する必要がありますか?

4

1 に答える 1

0

はい、再描画する領域を定義するダーティ再描画を行わない限り、キャンバス上のすべてのポイントが破棄されます。

于 2012-06-07T07:27:44.250 に答える