4

Canvaselementを使用してAndroidゲームを開発しています。大きなゲームマップに多くのグラフィック要素(スプライト)を描画しています。これらの要素は、、などの標準的なグラフィック関数によって描画さdrawLineれますdrawPathdrawArc

それらが画面に表示されているかどうかをテストするのは難しくありません。したがって、それらが画面の外にある場合、私はそれらの描画ルーチンを完全にスキップする可能性があります。しかし、これでもCPUコストがかかります。私Android Graphics Libraryよりも早くこれを行うことができるのだろうか?

要するに、画面座標から完全に外れていても、すべてを描画しようとするとAndroid Graphics Library、それらを処理し、CPUをあまり使用せずに描画できると信じているのか、描画領域の長方形を自分でチェックして、完全に外れているのかを確認する必要があります。画面、描画ルーチンをスキップしますか?どちらが適切な方法ですか?どちらが速いと思われますか?

ps:Androidv2.1以降をターゲットにしています。

4

1 に答える 1

4

完全に科学的ではないテストから、画面よりも広い領域にタイル状に並べられたビットマップを描画しましたが、ビットマップが画面に表示されているかどうかを事前に確認しても、それほど大きな違いはないようです。

あるテストでは、Rectを画面サイズに設定し、別のRectをビットマップの位置に設定し、描画する前にRect.intersects()をチェックしました。他のテストでは、ビットマップを描画しました。300回の抽選の後、目に見える傾向はありませんでした。ある方向に進んだものもあれば、別の方向に進んだものもありました。フレームごとに300描画テストを試しましたが、フレームごとのばらつきは、チェックされた描画とチェックされていない描画の違いよりもはるかに大きかった。

そのことから、Androidはネイティブコードの範囲をチェックしていると言っても差し支えないと思います。さもないと、かなりの違いが予想されます。私のテストのコードを共有したいと思いますが、状況に応じて独自のテストを行うのは理にかなっていると思います。ポイントの動作がビットマップと異なる可能性があります。または、ペイントやキャンバスの他の機能によって状況が変わる可能性があります。

それがあなたの助けになることを願っています(または私が同じ質問でしたように、このスレッドに出くわす別の人)。

于 2012-09-13T13:13:00.363 に答える