ページ 11

【android】 イライラ棒の自機を画像で表示したい

Posted: 2016年6月06日(月) 10:17
by nanashi1
件名の通りです。androidプログラミングの館で公開されているイライラ棒アプリの自機をプレイヤークラスで読み込み、描画を行いたいです。

TaskクラスにContextを持たせて、Playerクラスで使おうと思って

コード:

public abstract class Task {

	protected Context _context;

	public void Task(Context c) { _context = c; }

}
を追加して、Playerクラスで

コード:

public class Player extends Task {

	final static float SIZE = 20;
	private Paint _paint = new Paint();
	public Task _task;
	public SurfaceHolder holder;

	public Player(){
		Resources res = _task._context.getResources();
		Bitmap katsuo = BitmapFactory.decodeResource(res, R.drawable.katsuo);
	}

	@Override
	public boolean onUpdate(){

		return true;
	}

	@Override
	public void Draw( Canvas c ){
		//c = holder.lockCanvas();
		c.drawBitmap(katsuo, 0, 0, _paint);
		//holder.unlockCanvasAndPost(c);
	}

}
としました。

コーディング中のエラーは消えたのですが、エミュレーターで実行した際に、読み込み部分(Resources res ・・・)にエラーが出ます。 試行錯誤したのですが解決策が全く判りません。ヒントを教えて頂けないでしょうか?よろしくお願いいたします。

Re: 【android】 イライラ棒の自機を画像で表示したい

Posted: 2016年6月06日(月) 10:56
by nanashi1
すいません、正確には、

コード:

public class Player extends Task {

	final static float SIZE = 20;
	private Paint _paint = new Paint();
	public Task _task;
	public SurfaceHolder holder;

	Resources res = _task._context.getResources();
	Bitmap katsuo = BitmapFactory.decodeResource(res, R.drawable.katsuo);
	
	public Player(){

	}

	@Override
	public boolean onUpdate(){

		return true;
	}

	@Override
	public void Draw( Canvas c ){
		//c = holder.lockCanvas();
		c.drawBitmap(katsuo, 0, 0, _paint);
		//holder.unlockCanvasAndPost(c);
	}

}
でした。

Re: 【android】 イライラ棒の自機を画像で表示したい

Posted: 2016年6月06日(月) 22:38
by みけCAT
_taskを初期化せずに使用するのはまずいのではないでしょうか?

Re: 【android】 イライラ棒の自機を画像で表示したい

Posted: 2016年6月07日(火) 11:23
by nanashi1
Task _task の部分は参照型変数で、初期値を設定していない(初期化を省略している)から、現時点ではnullが代入されている。つまり、うまくContextの情報をPlayerクラスに渡せていないという事でしょうか?

Re: 【android】 イライラ棒の自機を画像で表示したい

Posted: 2016年6月08日(水) 11:13
by nanashi1
GameMgrクラスに仮引数としてContextを持たせて
Playerクラスを

コード:

public class Player extends Task {

   protected Context _context;
 
    public Player(Context _context){
        _context = context;
        Resources res = context.getResources();
        Bitmap katsuo = BitmapFactory.decodeResource(res, R.drawable.katsuo);
    }
 
    @Override
    public boolean onUpdate(){
 
        return true;
    }
 
    @Override
    public void Draw( Canvas c ){
        c.drawBitmap(katsuo, 0, 0, _paint);
    }
 
}
本来予定していたTaskクラスにContext情報を持たせて全クラスにContext情報を受け渡す手法とは変わってしまいましたが、無事描画する事が出来ました。