2011年4月25日月曜日

Androidでゲーム ブロック崩し編                 10回目:ブロックが壊れたらアイテムが出て来る

ブロックを壊したらアイテムを出すようにする。

大まかな流れ
ブロックにボールがぶつかる

アイテムの保管庫からアイテムを呼び出し、
ぶつかったブロックの位置にアイテムをセットする

アイテムが降ってくる

板とアイテムが接触

点数が入る

アイテムを保管庫に戻す。

取り合えず、アイテムを一個だけ出てくるようにする。
複数処理は行わない。

属性の設定
アイテムのクラスファイルを作成する。
ブロックを壊したら、ブロックの位置にアイテムをセットするので、アイテムの座標値を設定する。

あと、交差判定処理に使用する為のアイテムのサイズを設定する。
今回のアイテムサイズは26ドット(幅と高さ同じ物)


今回使用した画像


画像のイメージ変数の作成

保管庫を作らないといけないので、Pointクラスを呼び出す。
定数で設定する。
こんな感じ
private static final Point Storage=new Point(-50,-50);

あと、フラグを用意する。
フラグは、ブロックを壊したら、アイテム画像を表示する為のもので、
ブロックを壊したら、trueする。初期状態はfalse。

それと、アイテム画像が画面下まで行った時、保管庫に行くために画面のサイズを
取得する必要があるので、SurfaceViewを設定しているクラスファイルを呼び出すための
変数を作る。

こんな感じ
private MainSurfaceView panel;


コンストラクタの中身
○コンストラクタは、まず、イメージ画像の呼び出し
○保管庫から呼び出してアイテムの座標値にセットする
○アイテムを移動するための設定
○フラグの初期化

を、それぞれ記述する
こんな感じ
public Item1(MainSurfaceView panel) {
this.panel=panel;

//イメージの読み込み
Resources r=panel.getResources();
img=BitmapFactory.decodeResource(r,R.drawable.item_1);

//保管庫から呼び出して、画像の座標値に設定する
x=Storage.x;
y=Storage.y;

//移動値の設定
//移動するときは、垂直に降りてくる
move_x=0;
move_y=3;

//フラグ変数
//初期状態はfalse
flg=false;
}

移動用メソッド
○移動用メソッドの中身は、
○移動するときの設定
○画面下に出た時の設定

こんな感じ
x+=move_x;
y+=move_y;

//画面下に出た時の処理
if(y>panel.getHeight()) {
//画面下に出たら保管庫に移動する
Store();
//フラグをfalse
flg=false;
}

描画用メソッド
○メソッドの中身は
○フラグがtrueの時、画面に表示されるように設定する

交差処理
○板とアイテムが接触したらtrueを返すメソッドを作成する

SurfaceViewを設定しているクラスファイルで呼び出すためのメソッドの作成をする。
○ブロックを壊したら、trueにするメソッド
○板とアイテムが接触したらfalseにするメソッド
○ブロックにセットするメソッド
○アイテムを取得又は、画面下から出た時に保管庫に移動するためのメソッド


SurfaceViewを設定しているクラスファイルでの設定

設定する内容は、
○描画処理
○移動処理
○ボールとブロックの交差処理
○アイテムと板の交差処理

ボールとブロックがぶつかったら、アイテムをセットする
こんな感じ
//位置のセット
item1.setPos(block_Pos.x,block_Pos.y);
//フラグをtrue
item1.Flg();

この中で注意することは、ブロックの位置を取得する時の記述場所に注意しないといけない。
item1.setPos()の上に記述するとアイテムはセットされない。
ブロックとボールの交差判定を呼び出している条件式の中に記述してもアイテムは出てこない。

ブロックは複数処理を行っているので、
for(int i=0;i<NUM_BLOCK1;i++) {
Point block_Pos=block1[i].getPos();

//ブロックとボールの交差判定条件
if(block[i].collideWith(ball)) {
以下省略

//位置のセット
item1.setPos(block_Pos.x,block_Pos.y);
//フラグをtrue
item1.Flg();
}

と記述した方がいい。
Point block_Pos=block1[i].getPos();
item1.setPos(block_Pos.x,block_Pos.y);
では、アイテムは出てこない。

アイテムと板の交差判定処理
アイテムと板の交差判定条件と、アイテムを取得したら保管庫に移動するメソッド、
アイテムを取得したら、フラグをfalseに設定。
点数を加算する処理。
を設定する。


※ブロックとボールの交差判定の調整や、ボールの動き等は調整していない。
ブロック1個壊したら、50点入るようにしている。
アイテムを取得したら、点数が1000点加算される


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

1 件のコメント:

  1. お世話になっております。
    現在、androidアプリの作成にチャレンジしているタロイといいます。

    現在、ブロック崩しで、上記のような事をしようと摸索しています。突然で大変申し訳ないのですが、上記だけだと良くわからな為、できましたら、ソースを頂けないでしょうか?

    お手数をお掛けいたしますが、何卒、宜しくお願い致します。

    返信削除