Please wait...

最新のお知らせ・ニュース


androidゲームプログラミング シューティングゲームその1
<公開日:2012年01月22日>

SurfaceViewでシューティングゲームを作っていく。
Activity側は前回と同じ。
ゲーム処理部分を全てrun()の中に書くと分かりにくいので別にクラスを作っていく。
まずは自分の機体のクラス。

[java]
public class MyPlane{
private Bitmap my_image;
private int X;
private int Y;

public MyPlane(MainGame main) {
my_image=main.my_image;
}
public void move(float touchX, float touchY) {
X=(int)touchX;
Y=(int)touchY;
}
public void draw(Canvas canvas){
canvas.drawBitmap(my_image, X,Y, null);
}
}
[/java]

続いてSurfaceView側。

[java]public class MainGame extends SurfaceView implements SurfaceHolder.Callback,Runnable {
private Canvas canvas;
private Thread mainLoop;
private SurfaceHolder holder;
private MyPlane myplane;
Bitmap my_image;
public MainGame(Context context) {
super(context);
Resources res = this.getContext().getResources();
my_image=BitmapFactory.decodeResource(res, R.drawable.a_random17_e);
myplane=new MyPlane(this);
holder=getHolder();
holder.addCallback(this);
}
@Override
public void run() {
while (mainLoop!=null) {
canvas=getHolder().lockCanvas();
canvas.drawColor(Color.BLACK);
myplane.draw();
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.BLACK);
holder.unlockCanvasAndPost(canvas);
mainLoop = new Thread(this);
mainLoop.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mainLoop = null;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float touchX = event.getX();
float touchY=event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
myplane.move(touchX,touchY);
break;
case MotionEvent.ACTION_MOVE:
myplane.move(touchX,touchY);
break;
}
return true;
}
}
[/java]

SurfaceView側で大事なのはonTouchEventの部分。
ここでは画面をタッチして、動かした時の座標を得てそれを引数にして自機のmoveメソッドを呼び出している。
コンストラクタでの前回との違いはdecodeResource()で自機の画像を取得しているところ。
本来はMyPlane側でやるべきだがdecodeResource()の1番目の引数のResourcesを得るためにはActivityクラスでインスタンス化されたこのクラスでやる必要があった。
MyPlaneクラスをインスタンス化するときに引数として自分自身のクラスを渡している。
MyPlaneのコンストラクタでMainGameクラスの中で必要なものを取得する。今回は自機の画像だけ。
drawメソッドでSurfaceView側で取得したcanvasを引数として受け取り、その画像を描画する。











どんな小さな事でもまずはお気軽にご相談下さい。お見積もりはいつでも無料で承ります。

この度は数あるホームページ制作会社から、当社のサービスに関心を示して頂き、本当にありがとうございます。 きっと貴社は、信頼できる良いホームページ作成会社をお探しの事と思います。当社は、お客様に心から喜んでいただけるよう「誠実さ」「優しさ」を心がけて仕事に励んでいます。 お客さまの思い描くホームページが完成するよう、精一杯お手伝いさせて頂きますので、ホームページ作成は是非当社にお任せ下さい。

お問い合わせはこちら

富山県・地域密着だからできる安心・丁寧なホームページ作りをお約束します。
Copyright (C) 2016 Awake Computer All Rights Reserved.