ページ 11

アンドロイドアプリでViewを使わず画像を表示する

Posted: 2012年10月23日(火) 16:27
by 宮miya
アンドロイドアプリの館を参考にアンドロイドでゲームを作っているのですが、
Viewを使わずに画像を表示させる方法が分かりません。
プレイヤーを青い丸ではなく画像で表示するにはどうしたらいいでしょうか?

GameMgrクラスやPlayerクラスで表示させたいです。

いくつかサイトを回って試しにGameMgrクラスでBitmapを使って表示させようとしましたが
getContext()やgetResources()は未定義で使えませんでした。

コード:

public class GameMgr{
	private static final float PI = (float) Math.PI;
	private LinkedList<Task> _taskList = new LinkedList<Task>();// タスクリスト
	private eStatus _status = eStatus.NORMAL;
	private Player_player;
	private Bitmap occhan;

	GameMgr() {
		Resources r = this.getContext().getResources();
		occhan= BitmapFactory.decodeResource(getResources(), R.drawable.neechan);
		_taskList.add(_player);
		_taskList.add(new FpsController());
	}
}

Re: アンドロイドアプリでViewを使わず画像を表示する

Posted: 2012年10月23日(火) 21:52
by Dixq (管理人)
getContextやgetResourcesはActivityの親で定義されているので、GameMgrの持ち物ではないです。
IrairaBarActivityがGameSurfaceViewを作りますが、その時Contextを渡しています。
このContext情報を渡してやればよいでしょう。
_gameMgr = new GameMgr()
をGameSurfaceViewのコンストラクタに移動させ、引数にContext情報を持たせます。
GameMgrではこのContext情報を保持し、
そこからgetContextやgetResourcesを呼べば良いでしょう。

Re: アンドロイドアプリでViewを使わず画像を表示する

Posted: 2012年10月24日(水) 11:45
by 宮miya
以下のようにうまく表示させられました。
GameMgrにContextを持たせればいいんですね、ありがとうございました^^

コード:

public class GameMgr{
	private Bitmap occhan;

	GameMgr(Context context) {
		Resources r = context.getResources();
		occhan= BitmapFactory.decodeResource(r, R.drawable.occhan);
	}

~~略~~

	public void onDraw(Canvas c) {
		Paint p = new Paint();
		c.drawColor(Color.WHITE); // 白で塗りつぶす
		for (Task task : _taskList) {
			task.onDraw(c);// 描画
		}
		c.drawBitmap(occhan, 30.0f, 100.0f, p);
		drawStatus(c);
	}
}

Re: アンドロイドアプリでViewを使わず画像を表示する

Posted: 2012年10月24日(水) 21:30
by Dixq (管理人)
もしあらゆるViewでContext情報を参照したければ、Context情報を外に公開してしまうというのも手です。
本サイトで紹介しているような造りだと、Activityがゲーム内で必ず一つしか存在しないので、シングルトンにしてしまうのもありかと思います。