2011年4月16日土曜日

Androidでゲーム ブロック崩し編                 3回目:板画像のタッチ操作

板をタッチ操作で動かす

板を動かさないと動いているボールをはじく事が出来ない。

まずは、板をタッチ操作で動かすことからはじめる

タッチイベントは、ViewクラスでonTouchEvent() {}を呼び出す。

今回必要な設定は、タッチしたとき、タッチして動かしている、
画面から離れた時の3つの設定を使う。

変数でtouchX,touchY,touchActionを作成、それぞれ型はint型とする。

作った変数にそれぞれタッチイベントのX座標とY座標を代入し、またtouchActionには
アクション種別の取得を行う

touchX=event.getX();
touchY=event.getY();
touchAction=event.getAction();

次に、条件式でMotionEventクラスのアクション種別の定数を呼び、
それを、touchActionと同じかどうか判断する
if(touchAction==MotionEvent.ACTION_DOWN)
if(touchAction==MotionEvent.ACTION_MOVE)
if(touchAction==MotionEvent.ACTION_UP)

これらの条件が一致した時に板の設定をしているクラスから、
板のX座標値とY座標値を呼び出し、代入してあげる。

どういうときに、代入するかと言う話になるので、一致したらフラグを立てるようにしてあげる。

例えば、
if(touchAction==MotionEvent.ACTION_DOWN)
//タッチしたらフラグはtrue
flg=true;
if(touchAction==MotionEvent.ACTION_MOVE)
//MOVEしたら、フラグはtrue
flg=true;
if(touchAction==MotionEvent.ACTION_UP)
//離したら、フラグをfalseにする
flg=false;

flgがtrueの時に板の座標値に代入してあげるようにする
if(flg==true)

代入する値は、タッチしたときの座標値XとYを代入する
board.setX(touchX);
board.setX(touchY);

どのメソッドで処理するか
MainSurfaceViewのクラスファイルにmove()メソッドを作成しこのブロックの中に
if(flg==true) {
board.setX(touchX)
board.setY(touchY)
}

後は、板クラスで作った移動制御メソッドを呼び、run()メソッドの中に記述すれば
動かすことが出来る

板の移動範囲
板を移動させる時に、このままだと、画面を縦横無尽に動き回る。
これを、決められた範囲で動かしたい。




左の図で、水色部分の範囲だけで板が
動くようにするには、板を設定しているクラスファイル
にmoveメソッドを作り、その中に、
移動を制限するコードを記述するばいい。















例えば、
public void move() {
x+=move_x;
y+=move_y;

//移動範囲の設定
//x=0~x=320
//y=380~y=380
//上
if(y<380) {
y=380;
move_y=-move_y;
}
//下
if(y>380) {
y=380;
move_y=-move_y;
}
//左
if(x<0) {
x=0;
}
//右
if(x>320-img.getWidth()) {
x=320-img.getWidth();
}
}
見たいな感じで作る。





その他のブロック崩し関連
Androidでゲーム ブロック崩し編 1回目:画像の表示

0 件のコメント:

コメントを投稿