プロが教える店舗&オフィスのセキュリティ対策術

こんにちは、Java初心者の者です。

今週の末に、文化祭があるので、その際の出し物で「ブロック崩し」を出すことにしたのですが、
ブロックの当たり判定がおかしいのです。

おかしいというか、正確にはブロックとの当たり判定自体はあるのですが、ブロックと当たったらブロックが消えるようにしているはずが、消えないのです。

一応、消えてはくれるのですがボールとブロックが離れたらまた元の色に戻ってしまいます。
フラグ管理を使っての処理で、ボールとブロックが触れたらフラグを「偽」。そしたらそれに該当するブロックを描画しないようにする仕組みなのですが、どうも上手くいきません。

以下コードです。



~~~~中略~~~~



//ブロックの座標の設定
int k=0;
for(int j=0;j<block_r;j++)
{
for(int i=0;i<block_g;i++)
{

block_x[k] = i*block_w;
block_y[k] = j*block_h;
block[k] = 1;
flag[k] = true;
k++;
}

}

//ブロックに当たった時の処理

for(int i=0;i<30;i++)
{
if(flag[i] == true)
{

if(y + ball_y >= block_y[i] && y <= block_y[i]+block_h && x + ball_x >= block_x[i] && x <= block_x[i] + block_w)
{

vy = -vy;


flag[i] = false;

}
}


}

//ブロックの描画
for(int i=0;i<30;i++)
{
if(flag[i] == true )
{
//ブロックの描画
offg.setColor(Color.yellow);
offg.fillRect(block_x[i],block_y[i],block_w,block_h);
//ブロックの枠線
offg.setColor(Color.black);
offg.drawRect(block_x[i],block_y[i],block_w,block_h);
}


}

~~~~中略~~~~~


paintメソッドの部分だけ載せてます。

どこかおかしいところがあれば、アドバイスを頂ければ幸いです。

宜しくお願い致します。

A 回答 (1件)

//ブロックの座標の設定


int k=0;
for(int j=0;j<block_r;j++) {
for(int i=0;i<block_g;i++) {
block_x[k] = i*block_w;
block_y[k] = j*block_h;
block[k] = 1;
flag[k] = true; // <- 明らかにここがおかしい
k++;
}
}

paintメソッドが走るたびにflagがもとに戻っていますね。
    • good
    • 0
この回答へのお礼

すみません、仰るとおりflagの書く位置がおかしかったようです。
flagの宣言の部分を他のところに書いたところ、上手く動作してくれました。

ご回答、ありがとうございました!

お礼日時:2011/11/04 20:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!