SurfaceViewでゲームを作るときの基本的な書き方を紹介する。
[java]
public class gameactivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new MainGame(this));
}
}
[/java]
まずActivity側でSurfaceViewのインスタンスを生成してsetCotentView()で画面に表示する。
そのままでは上にタイトルバーとタスクバーがついていて邪魔なのでsetContentViewする前の2行で全画面にしている。
[java]
public class MainGame extends SurfaceView implements SurfaceHolder.Callback,Runnable {
private Canvas canvas;
private Thread mainLoop;
private SurfaceHolder holder;
public MainGame(Context context) {
super(context);
holder=getHolder();
holder.addCallback(this);
}
@Override
public void run() {
while (mainLoop!=null) {
canvas=getHolder().lockCanvas();
canvas.drawColor(Color.WHITE);
getHolder().unlockCanvasAndPost(canvas);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int arg1, int arg2, int arg3) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
canvas = holder.lockCanvas();
canvas.drawColor(Color.BLUE);
holder.unlockCanvasAndPost(canvas);
mainLoop = new Thread(this);
mainLoop.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mainLoop = null;
}}
[/java]
SurfaceViewが生成されたときに呼び出されるsurfaceCreated()の中でmainLoopをスタートさせておりここでrun()が呼び出される。
run()のwhile文の中はmainLoopが終了するまで無限ループになっておりこの中で描画処理を行なっていく。今回は白く塗っているだけ。次回からはゲーム部分の処理を実装していく。