Androidデュアルバッファテクノロジー
Androidの
Surface Viewクラスはデュアルバッファメカニズムです.そのため、ゲームを開発する際には、できるだけViewを使わずにSurfaceViewを使うようにすると、効率が高く、SurfaceViewの機能もより充実しています.デュアルバッファリング技術をより容易に理解するために、Viewでデュアルバッファリングを実現する方法について説明します.
まず概説すると、デュアルバッファリングの核心技術は、setBitmapメソッドを使用して、描画するすべてのグラフィックをBitmapに描画することです.つまり、メモリスペースで完了してからdrawBitmapメソッドを呼び出して、このBitmapを画面に表示します.具体的な実装コードは以下の通りです.
Surface Viewクラスはデュアルバッファメカニズムです.そのため、ゲームを開発する際には、できるだけViewを使わずにSurfaceViewを使うようにすると、効率が高く、SurfaceViewの機能もより充実しています.デュアルバッファリング技術をより容易に理解するために、Viewでデュアルバッファリングを実現する方法について説明します.
まず概説すると、デュアルバッファリングの核心技術は、setBitmapメソッドを使用して、描画するすべてのグラフィックをBitmapに描画することです.つまり、メモリスペースで完了してからdrawBitmapメソッドを呼び出して、このBitmapを画面に表示します.具体的な実装コードは以下の通りです.
public class GameView extends View implements Runnable
{
/* Bitmap */
Bitmap mBitQQ = null;
Paint mPaint = null;
/* */
Bitmap mSCBitmap = null;
/* Canvas */
Canvas mCanvas = null;
public GameView(Context context)
{
super(context);
/* */
mBitQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.qq)).getBitmap();
/* */
mSCBitmap=Bitmap.createBitmap(320, 480, Config.ARGB_8888);
/* Canvas */
mCanvas = new Canvas();
/* mSCBitmap */
mCanvas.setBitmap(mSCBitmap);
mPaint = new Paint();
/* mBitQQ mSCBitmap */
mCanvas.drawBitmap(mBitQQ, 0, 0, mPaint);
/* */
new Thread(this).start();
}
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
/* mSCBitmap */
canvas.drawBitmap(mSCBitmap, 0, 0, mPaint);
}
//
public boolean onTouchEvent(MotionEvent event)
{
return true;
}
//
public boolean onKeyDown(int keyCode, KeyEvent event)
{
return true;
}
//
public boolean onKeyUp(int keyCode, KeyEvent event)
{
return false;
}
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
{
return true;
}
/**
*
*/
public void run()
{
while (!Thread.currentThread().isInterrupted())
{
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
}
// postInvalidate
postInvalidate();
}
}
}