4

Android2.2を使用してゲームを構築しています。メインゲームActivityはカスタムを使用しますSurfaceView

class GameView extends SurfaceView

私が理解していることから、このonDraw()メソッドは独自のスレッドを実行する必要があります。そのことを念頭に置いて、私は背景画像を追加することを計画していますonDraw()

canvas.drawBitmap(wallpaper, 0, 0, paint);
paint = new Paint();

しかし、ゲームを実行すると、非常に遅くなります。私がその行をコメントアウトするnew Paint()と、ゲームはスピードアップします。

私が間違っていることはありますか、それとも私の問題の解決策はありますか?たとえば、呼び出しの数を減らす方法はありonDraw()ますか?XMLまたは、カスタムSurfaceViewクラスに属性を追加しますか?

これが、描画可能な画像をロードする方法のコードです。


public Bitmap loadBitmap(String image) {
        Bitmap bitmap = null;

        try {
            int id = R.drawable.class.getField(image).getInt(new Integer(0));
            bitmap = BitmapFactory.decodeResource(context.getResources(), id);
//          bitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565); 
        } catch(Exception ex) {
            Log.e("loadBitmap", ex.getMessage());
        }

        return bitmap;
    }

onDrawこれがメソッドのコードです。残念ながら、すべてを投稿することはできません。

paint.setColor(Color.BLACK);
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
canvas.drawBitmap(gameLevel.getBitmap(), 0, 0, paint);
// draw object(1) 320x25
// draw object(5) 50x50 each
// draw object(n) 15x15 each, estimate
// draw object(n) 50x50 each
// collision check, draw hit tile on the image sheet

// draw game information using canvas.drawText() timeLine++;

前もって感謝します!

4

2 に答える 2

3

問題が「paint = new Paint();」だけの場合 行、Paint オブジェクトを 1 回だけ作成してみませんか? クラスが最初に作成され、それを Class 変数にします。次に、必要なときにいつでもオブジェクトを使用します。

于 2011-08-14T20:07:51.947 に答える
1

まだ行っていない場合は、背景をARGB_8888ではなくRGB_565としてロードしてみてください。それ以外の場合は、OpenGL に切り替える以外にできることはあまりありません

編集:

Options options = new Options();
options.inDither = false;
options.inJustDecodeBounds = false;
options.inSampleSize = 1;
options.mCancel = false;
options.inPreferredConfig = Config.RGB_565;

bitmap = BitmapFactory.decodeResource(context.getResources(), id, options);

それでも解決しない場合は、次の理由が考えられます。

  • 描画コードが間違っています
  • 描画時に背景をスケーリングします
  • エミュレーターで実行します
于 2011-08-14T15:59:26.020 に答える