こんにちは、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メソッドの部分だけ載せてます。
どこかおかしいところがあれば、アドバイスを頂ければ幸いです。
宜しくお願い致します。
No.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がもとに戻っていますね。
すみません、仰るとおりflagの書く位置がおかしかったようです。
flagの宣言の部分を他のところに書いたところ、上手く動作してくれました。
ご回答、ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 教えて!goo ブロック機能リニューアルに伴い、質問を見たくないユーザーをブロックすれば質問非表示になったのですか。 4 2022/07/02 20:55
- HTML・CSS ブロックエディターで作りつつ、画像を挿入しつつ、画像にスタイルシートのコードを付ける方法はありますか 1 2022/08/23 18:46
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript htmlとcssに関する質問です 3 2022/12/06 05:36
- HTML・CSS 分数が正常に表示されない。 6 2022/05/09 18:53
- JavaScript htmlとcssで分数を表示後、分数の右側に文書を書きたい 1 2022/04/28 10:09
- 英語 A generalization can be made that a cyst, which oc 2 2023/03/30 19:50
- 英語 SPECS の所の LENGTH というのは、BARREL LENGTH なのか?全体の長さなのか? 1 2022/04/27 20:05
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JAVAでの背景画像表示
-
<JFreeChart> 縦軸の値の間隔を...
-
GDI+で描画した画像を消去する...
-
Java、jPanelに描画する
-
JavaScriptで直線を描画したい
-
SwingのpaintComponent(...
-
VB.NET フォーム上に描いたグ...
-
BMP画像を画像処理して連続に表...
-
Java 15パズルを作ったのですが...
-
VB.NETのSendMessageを教えてく...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
c++,ある関数のクラスから別の...
-
private static という変数の修飾
-
3年間同じクラスになる確率
-
配列の重複する値とその個数を...
-
コマンドプロンプト実行後に画...
-
変数名の付け方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET フォーム上に描いたグ...
-
VB.NETのSendMessageを教えてく...
-
JAVAでの背景画像表示
-
C# DataGridView のCellPaintin...
-
重なった要素上でのイベントで...
-
C# リストビューの特定のセルの...
-
Androidで画像の中で指定した範...
-
画面のちらつきの原因が知りた...
-
複数画像表示切り替え Visual c++
-
Labelコントロールの背景をグラ...
-
VS Treeview のデザイン変更
-
描画処理が実行されない
-
GDI+で描画した画像を消去する...
-
このプログラミングをどう組み...
-
canvasで表示されてる画像を1...
-
ドラッグして矩形を描くには
-
getGraphics()の意味を教えて...
-
Canvas等の図形を移動する時,直...
-
DirectXのスプライト機能で3D回転
-
Exception occurred during eve...
おすすめ情報