10

キャンバスに限界があるのではないかと思っていました。

drawline(), drawbitmap(), drawcircle(), つまり、 Androidが実際にキャンバスに何かを描画し、CPUサイクルを浪費するなどの関数を使用する場合はどうなりますか?

すべての描画機能の後、画面に実際に印刷される画像は画面サイズによって決まるためです。また、画面サイズ以外のものを描画しても表示されません。

たくさんの描画関数を呼び出して、キャンバスに細かい部分を追加し、サーフェスを「ブリンブリン」にしたいです。それが範囲外である場合、それらが私の描画を遅くする場合、私はそれらを使用したくありません。

サーフェスビューの構造で小さなゲームに取り組んでいます。アドバイスをありがとうございます。

例えば:

<->b画面の外からロボットが歩いています。

ロボットの歩行画像をキャンバスに描くには、20個の描画機能が必要です。画面をスクロールすると、ロボットが見えます。

したがって、画面外の描画機能が実際に画面上に描画するのと同じくらいの時間がかかる場合。ロボットの位置がユーザーに見える場合にのみ、それを検出する必要があります。それから私は描画します。そうでなければ、私はしません。

描画機能がCPUサイクルをあまり浪費しないのであれば、現在の画面でロボットが見えなくても、毎回描画することができます。

4

2 に答える 2

13

キャンバスが画面全体を覆っているときにキャンバスの描画を高速化できるもう1つの方法は、背景のないテーマを使用することです。デフォルトのテーマには少なくともカラーの背景描画があり、ビューが画面全体に表示されている場合でも、ビューをその上に配置すると描画時間が遅くなります。

次のようなテーマを使用します。

    <style name="Theme.NoBackground" parent="android:Theme">
        <item name="android:windowBackground">@null</item>
    </style>
</resources>

Romain Guyは、この現象についてhttp://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/で詳しく説明しています。

于 2010-10-16T18:41:19.033 に答える
5

キャンバスは、ビットマップ(2D)またはopenGL(3D、私は経験がありません)によって支えられています。キャンバス上のすべての描画はクリッピング長方形にクリップされます。クリッピング長方形は、拡大、縮小、新しい長方形やパスとの交差などが可能です。したがって、キャンバスに描画する前に、クリッピング長方形を管理する必要があります。大きなビットマップ。画面サイズに等しい領域にクリップすると、CPUサイクルを節約できます。ゲームがスクローラータイプのゲームの場合は、画面サイズよりも大きい領域にクリップしてパンし、画面外に描画して、画面に表示される領域を更新することができます。ゲームのすべての方向に無限のスクロールがある場合は、メインの中央のキャンバスの周り全体に描画できる複数の小さなキャンバスを用意し、それらを左から右に反転させる必要があります。スクロールゲームの方向に応じて上から下へ。1つのキャンバスを持つ1つの大きなビットマップでは、小さなデバイスにはメモリフットプリントが大きすぎる可能性があります。

于 2010-10-16T16:22:13.353 に答える