私は現在、ある種のゲームを開発しています。これは横スクロールなので、多くの項目が動いており、その結果、再描画されています。別の (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 ではなく、オブジェクトを表す複数のビュー要素にフォールバックする必要がありますか?