androidのイライラ棒アプリの自機をbitmapで表示したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tama

androidのイライラ棒アプリの自機をbitmapで表示したい

#1

投稿記事 by tama » 13年前

ここのサイトのAndroidプログラミングの館で、イライラ棒アプリを作るページがあり、
s2.4 自機を作る  ではdrawCircle関数で円を自機として表示しています。

そこで円の代わりに画像で自機を表示しようと考えたのですが、
画像のリソースをどのようにして取得させればいいのかよく分かりません。
Player.javaの部分を"chara.png"を読み込むために、

コード:

public class Player extends Task {
        private Paint _paint = new Paint();     //描画設定
        //画像読み込み
        Resources res = this.getContext().getResources();
        Bitmap chara = BitmapFactory.decodeResource(res, R.drawable.chara);
        
        public Player(){
        }

        @Override
        public boolean onUpdate(){
                return true;
        }

        @Override
        public void onDraw( Canvas c ){
	        c.drawBitmap(chara,0, 0, _paint);
        }

}
このような文に変更したのですが、getContextが未定義の為使用できないと出てきます。
PlayerクラスからBitmapを表示させる方法が分かる方がいらっしゃったら、
教えていただけると有り難いです。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: androidのイライラ棒アプリの自機をbitmapで表示したい

#2

投稿記事 by Dixq (管理人) » 13年前

ContextはGameSurfaceViewが持っています。

GameSurfaceViewはGameMgrを持っています。
GameMgrはPlayerを持っています。

従って
GameSurfaceView→GameMgr→Playerの順にContextをコンストラクタ等で渡してやれば良いでしょう。

Activityが変化しないゲームなのであれば、Contextが変わることはないので、
シングルトンにContextを持たせてどこからでも取得できるようにしても良いと思います。

tama

Re: androidのイライラ棒アプリの自機をbitmapで表示したい

#3

投稿記事 by tama » 13年前

ご回答ありがとうございます。
contextに引き継ぎの仕組みは理解できたのですが、
実際にどのように書けばいいのかまだ分かりません。
↑の例のPlayer関数を

コード:

    public Player(Context context){
    	super(context);
	}
のように置き換えて、それを同様に
GameMgrにも行うということでしょうか?

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: androidのイライラ棒アプリの自機をbitmapで表示したい

#4

投稿記事 by Dixq (管理人) » 13年前

そういうことですが、superに渡すならTaskにContextを持たせるようにしてすべてに持たせるべきでしょうか。
しかしそうする位なら手っ取りばやくシングルトンで良いかもしれません。

tama

Re: androidのイライラ棒アプリの自機をbitmapで表示したい

#5

投稿記事 by tama » 13年前

ご回答ありがとうございます。

・Taskクラスにextend SurfaceViewを付ける
・Playerクラスのコンストラクタにsuper(context)の文を付ける
・GameMgrクラスでPlayerクラスへの引数にcontextを付ける

これでエラーが出なくなりました。
他の部分もいじっているのでまだ実行はしていませんが、
bitmapを表示させる事に関しては問題なくなったと思います。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: androidのイライラ棒アプリの自機をbitmapで表示したい

#6

投稿記事 by Dixq (管理人) » 13年前

Taskクラスの親をSurfaceViewにするのはまずいです。
TaskはViewではありません。

やるなら以下のようにTaskにContextを持たせ、子クラスから渡して持てるようにしてはどうでしょう。

コード:

public abstract class Task {
	protected Context _context;
	public Task(Context c){
		_context = c;
	}
	public boolean onUpdate(){
		return true;
	}
	public void onDraw(Canvas c){		
	}
}

閉鎖

“C言語何でも質問掲示板” へ戻る