0

私は現在、ある種のゲームを開発しています。これは横スクロールなので、多くの項目が動いており、その結果、再描画されています。別の (UI ではない) スレッドの SurfaceView ですべてを描画していますが、描画するアイテムがもう少し増えるとすぐに、パフォーマンスが低下します。パフォーマンスを向上させるための「良い」メカニズムはありますか? どうにかして複数のスレッドでこれを行うことはできますか?

複数のキャンバスを作成し、ViewObject リストの一部をそれぞれに (異なるスレッドで) 描画することを考えましたが、これらを「マージ」する方法がわかりません。

回転する画像を追加し始めたとき、パフォーマンスの問題が始まりました。私は次のようにそれらを回転させています:

         Matrix matrix = new Matrix();
            matrix.preRotate(mRotation, (float) (mResourceBitmaps[mFrame].getWidth()), (float) (mResourceBitmaps[mFrame].getHeight()) / 2f);

            Bitmap bmp2 = Bitmap.createBitmap(mResourceBitmaps[mFrame], 0, 0,
                    mResourceBitmaps[mFrame].getWidth(), mResourceBitmaps[mFrame].getHeight(), matrix, true);

そのため、コード内のアニメーション フレームごとに各ビットマップを回転させています。回転された各ビットマップ (および「標準」ビットマップ) の参照を保持する LruCache を使用して BitmapHolder クラスを追加し始めたとき、速度が向上しました。しかし、それはまだ一種の遅れです。

これが「よりプロフェッショナルな」ゲームでどのように行われるかについてのアドバイスはありますか? 学習要因のために、これを自分で開発し、サードパーティのライブラリを使用したくない.

基本的に、私の質問は次のとおりです。単一のキャンバス/サーフェスビューに「大量の」ビットマップ/リソース(描画可能なフォルダーにPNGとして保存されているため)を描画するにはどうすればよいですか? または、SurfaceView ではなく、オブジェクトを表す複数のビュー要素にフォールバックする必要がありますか?

4

1 に答える 1