2011年4月18日月曜日

Androidでゲーム ブロック崩し編                 5回目:ボールと板の交差判定

交差判定・・・。

それは、ゲーム製作で1番の難敵かもしれない(自分)

交差判定には色々ある。
矩形同士、円形同士、点と線など色々。

今回は、そんな数ある中で選ばれた矩形同士の交差判定を使って、
ボールと板の衝突を演出する。

矩形同士の交差を図に表すと

















Androidには、Rectと言うメソッドが存在する。

if(ごちゃごちゃごちゃりんこ<ごちゃお||ごちゃみ>ごちゃりんこ&&・・・・){
反発するぞ!!
}
など使わなくてもこのRectメソッドを使えば、いとも簡単に反発してくれる。

そもそも、JavaにはRectangleなる物があり、このRectangleを使用して
矩形同士の交差を判定するのだが、
Androidには、RectangleではなくRectとなっており、
使い方はJavaの時と同じ用に使えばいい。

大まかな流れ

boolean型のメソッドを作る

交差した時の処理を作る

呼び出す

流れが出来た所で作り方の一例

今回使用するのは、ボールと板なので、取り合えず、板を設定しているクラスファイルに
boolean型のメソッドを作る。

public boolean collideWidth(Ball ball) {
}

そして、ブロックの中身は
まず板の矩形
Rect rect_boar=new Rect()
引数の中身は、Androidで矩形を描画する時の引数と同じで
一応
int left,int top,int right,int bottom

次に、ボールの位置座標を取得
この時、ボールを設定しているクラスファイルでgetterを作っておく
Point ball_Pos=ball.getPos();

そして、ボールの矩形
Rect rect_ball=new Rect()
引数の中身は、Androidで矩形を描画する時の引数と同じで
一応
int left,int top,int right,int bottom

最後、boolean型なので、返さないといけない
この場合、返す条件は板とボールが交差したらtrueを返すというふうにしなくてはいけない。

交差のメソッドを呼び出す
interset()と言うものがあり、これを使う。

return rect_board.intersect(rect_ball);

そして、ここは、終了。

次に、メインのクラスファイルで、交差したらどうするかのメソッドを作る。
public void collisionDetection() {

ブロックの中身は
if(board.collideWidth(ball)) {
このブロックの中に、交差したら、
どうするかの内容を記述する。
}

最後、run() メソッドで
collisionDetection()
を呼べば、反発してくれる。

参考
android reference:Rect





その他のブロック崩し関連

0 件のコメント:

コメントを投稿