プログラムが実行されたときのファイルの流れはmanifest→Senkaku.java→main.xml→AirFight.java となります。(ここで、Senkaku→Defence、AirFight→AirFightViewにファイル名を変更)←注意 私の勝手な変更です。パッケージ名もDefenceに変更です。作成途上でエラーを修正してるうちに そうなってしまいました。 よって、ゲーム本体のプログラムはDefenceとAirFightViewの二枚のjavaファイルに書き込みます。 とりあえず画像をスマートフォンに表示してみます。 画像はresファルダーにdrawbleフォルダーを作成しここに表示したい画像を貼り付けます。 次に、Defence.javaのコードを下記の通りにします。Activityクラスを継承します。 package kureishi.example.defence; import kureishi.example.defence.R; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.Window; import android.view.WindowManager; import android.graphics.Point; import android.view.Display; public class Defence extends Activity { public float disp_w,disp_h; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); Window window=getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); WindowManager manager=window.getWindowManager(); Display disp=manager.getDefaultDisplay(); Point size=new Point(); disp.getSize(size);//スマートフォンディスプレイの寸法の取得 disp_w=size.x;//スマートフォンディスプレイの寸法の取得 disp_h=size.y;//スマートフォンディスプレイの寸法の取得 setContentView(R.layout.main);//処理がmain.xmlに移行すると言う意味 } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.defence, menu); return true; } @Override public void onDestroy(){ super.onDestroy(); } } 「disp.getSize(size); disp_w=size.x; disp_h=size.y;」 はスマートフォンの様々なサイズのスマートフォンに対応するため、スマートフォンディスプレイ の寸法を取得しています。 次はmain.xmlのコードです。 //ここ注意です。処理がAirFightView.javaへ //ドットを見逃さないように これが終わればAirFightView.javaに移ります。 ゲームアプリでは早い処理に対応するためSurfaceViewクラスを継承します。 またインターフェイスも搭載します(必須です) スマートフォンの寸法を取得→寸法修正係数(dw,dh)を計算→画像の取得(setBoardSizeメソッド内) →画像の貼り付け(drawメソッド内)となります。 @Overrideの付いているメソッドは継承したクラスファイル、搭載したインターフェイスを 設定したため必要なメソッドです。 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;//動作確認をするスマートフォンの寸法 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();//画像の取得 back=resources.getDrawable(R.drawable.sky_1);//画像の拡張子は書かない sen01=resources.getDrawable(R.drawable.senkaku);//senkaku.png .pngは不要 } public void draw(){ Canvas canvas=holder.lockCanvas(); back.setBounds(new Rect(0,0,(int)w,(int)(h/4))); back.draw(canvas); } @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){ } } これでスマートフォンに好きな画像を表示することができます。