北星 さんが書きました:
コード:
public boolean onTouchEvent(MotionEvent event){
pl=new Player();
pl._cir._x=event.getX();
pl._cir._y=enent.getY();
return true;
}
}
画面がタッチされたらonTouchEvent()が呼び出され、
onTouchEvent()の中で_cirの値は変化しているのですが、
Player()の側ではの値が変化しません。
どうすればタッチした所の座標を_cirにセットできるのでしょうか。
コード:
public class GameMgr {
private LinkedList<Task> _taskList = new LinkedList<Task>();//タスクリスト
GameMgr(){
_taskList.add( new Player() ); // 実際に表示されるPlayerのインスタンス(1)
_taskList.add( new FpsController() );
}
}
表示されいているPlayerのインスタンスは(1)で作成されたインスタンスです。
一方、IrairaBarActivity#onTouchEventで作成されているPlayerのインスタンスは実際に表示されいている(1)のインスタンスとは違います。
オフトピック
コード:
new Object() == new Object()
は常に偽です。
なので、IrairaBarActivity#onTouchEventで作成されたPlayerのインスタンスのフィールドを変更しても、表示されているPlayerには変更が及びません。
それから無闇にフィールドをpublicにするのは良くありません。
修正方法としてはいくつかありますが、その内の一つを載せておきますので参考にしてください。(変更はs2.4からの変更です)
Playerクラス[追加:setLocation(float, float)]
コード:
public void setLocation(float x, float y) {
_cir._x = x;
_cir._y = y;
}
GameMgr[変更:コンストラクタ, 追加:Player player[フィールド], onTouchEvent(MotionEvent)]
コード:
public class GameMgrr {
private Player player = new Player();
public GameMgr(){
_taskList.add(player);
_taskList.add( new FpsController() );
}
public boolean onTouchEvent(MotionEvent e) {
player.setLocation(e.getX(), e.getY());
return true;
}
}
GameSurfaceViewクラス[追加:onTouchEvent(MotionEvent)]
コード:
public boolean onTouchEvent(MotionEvent e) {
return _gameMgr.onTouchEvent(e);
}
[hr][変更]ソースコードのスタイルをオールマンからK&Rに統一
[変更]変更例を全面的に変更