0

現時点では、アニメーション付きのチェス ゲームで SurfaceView を試しています。エミュレーターで約 8 FPS しか得られません。チェス盤と 32 個のチェスの駒を描画し、すべてを回転させて (滑らかさを確認するため)、アンチエイリアシングを使用しています。Droid では約 20FPS になるので、あまりスムーズではありません。OpenGL を使用せずに、非常に少ない単純なアニメーションでゲームを実装することは可能ですか?

これは私がすべてのフレームで行うことです:

// scale and rotate
matrix.setScale(scale, scale);
rotation += 3;
matrix.postRotate(rotation, 152, 152);

canvas = surfaceHolder.lockCanvas();
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG));
canvas.setMatrix(matrix);

canvas.drawARGB(255, 255, 255, 255); // fill the canvas with white
for (int i = 0; i < sprites.size(); i++) {
    sprites.get(i).draw(canvas); // draws chessboard and chess pieces
}
4

2 に答える 2

3

SurfaceView の作成時に、すべてのビットマップを事前にスケーリングすることにしました。これで、変換行列をまったく使用する必要がなくなりました。エミュレーターで 30 FPS を超えており、実際のデバイス (Droid) では完全にスムーズです。canvas.drawARGB(255, 255, 255, 255);また、FPS を約 5 増加させるものも削除しました。

于 2010-03-28T17:54:05.620 に答える
0

コードをもっと見ることができますか? チェスの駒のアイコンのサイズは? 描画時間を短縮するために、品質を下げることを検討してください。また、読み込むアイコンの数を制限し (色ごとに各タイプを 1 つ読み込む)、各正方形に読み込むアイコンのタイプをマトリックスに格納することもできます。

于 2010-03-27T12:43:56.570 に答える