ゲームの作成はSurfaceViewを継承し、インターフェイスSensorEventListener,SurfaceHolder.Callbackを 搭載したクラスで行います。スピードの要求される処理が必要だからです。 ここでは、AirFight.javaです。このファイルに様々な機能をプログラミングしていきます。 まず、ゲームの開始前の画面を表示し、ゲーム開始ボタンをタップするとゲームが開始するという 仕組みを作成します。とりあえず、タップすると別の画像が表示されれば良いわけですよね。 ここまでを作成します。前回のファイルに追加記入していきます。///の行を追記してください。 画像をdrawbleフォルダーに追加して下さい。 package kureishi.example.defence; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.*; import android.hardware.*; import android.util.AttributeSet; import android.view.*; import android.graphics.drawable.Drawable; import android.content.res.Resources; import android.os.SystemClock; import kureishi.example.defence.R; import kureishi.example.defence.Senkaku; public class AirFight extends SurfaceView implements SensorEventListener,SurfaceHolder.Callback{ private Activity context; public SurfaceHolder holder; public Senkaku defence; public Drawable sen01, back; public float w,h,dw,dh; public float xperia_w=720f; public float xperia_h=1280f; private boolean game_end=true;///ゲームの終了、開始を支持するフラッグ public Drawable destroyer_right,start;///2枚の画像 private Point press_loc;///タップしたときの処理 public AirFight(Context context){ super(context);init(context); } public AirFight(Context context,AttributeSet attrs){ super(context,attrs);init(context); } public void init(Context context){ this.context=(Activity)context; holder =getHolder(); holder.addCallback(this); setFocusable(true); requestFocus(); defence=(Senkaku) context; setBoardSize(); } public void setBoardSize(){ w=defence.disp_w;//スマートフォンの寸法取得 h=defence.disp_h;//スマートフォンの寸法取得 dw=w/xperia_w;dh=h/xperia_h;//寸法修正係数 Resources resources=context.getResources();//画像の取得 start=resources.getDrawable(R.drawable.start);///スタートボタン destroyer_right=resources.getDrawable(R.drawable.destroyer_right);///タップすると表示される画像 } ///追記(タップした時の処理) public boolean onTouchEvent(MotionEvent event1){ int n=event1.getAction(); float x=event1.getX(); float y=event1.getY(); switch(n){ case MotionEvent.ACTION_DOWN: press_loc=new Point((int)x,(int)y); if(isIn((int) x,(int) y,start.getBounds()) && game_end){ game_end=false;///フラッグを変更する } break; case MotionEvent.ACTION_UP: break; } return true; } ///追記ここまで ///変更 (画像の表示を条件分岐で処理) public void draw(){ Canvas canvas=holder.lockCanvas(); if(!game_end){ start.setBounds(new Rect(0,0,(int)(w/4),(int)(h/10))); start.draw(canvas); }else{ destroyer_right.setBounds((int)(w/2+100*dw),(int)(700*dh),(int)(w/2+230*dw),(int)(850*dh)); destroyer_right.draw(canvas); } holder.unlockCanvasAndPost(canvas);///追記してください } ///ここまで ///メソッド追記(タップ箇所を確認) public boolean isIn(int x,int y,Rect rect){ return x>rect.left && xrect.top && y< rect.bottom; } ///ここまで @Override public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){ } @Override public void surfaceCreated(SurfaceHolder holder){ draw(); } @Override public void surfaceDestroyed(SurfaceHolder holder){ try{ executor.shutdown(); }catch(Exception e){} } @Override public void onAccuracyChanged(Sensor sensor,int accuracy){ } @Override public void onSensorChanged(SensorEvent event){ } } これでスマートフォンに好きな画像を表示することができます。