配列型の短形(ブロック)と、動き回るボールの当たり判定について質問です。
ブロック個数
横 画面幅に合わせて変動するnum
縦 10段
の2次元配列でブロックを描画しています。
下記collisionDetectionメソッドをSurfaceViewを継承したCustomView内のrunループで呼んでいます。
collidewidth(バーとボールの当たり判定)はうまく動作しています。
下の、ブロック(配列)とボールの当たり判定ができず、ボールがすり抜けてしまいます。
ifの条件式は、ball+ball幅が、blockの中心座標(x,y)+高さ or 幅 を超えるか超えないかで判定しています。
ブロックの上下左右の辺に、ボールが侵入しているかどうか、です。
countはスコア表示用のメソッド
エラーは出てませんが、どこか変なところはありますでしょうか?
GameControl.java
Java
1public void collisionDetection(){ 2 if (bar.collideWidth(ball,bar)){ 3 4 if ( ball.x + ball.size >= bar.x - bar.halfBar && ball.x - ball.size <= bar.x + bar.halfBar ) { 5 6 ball.vy *= -1; 7 count.count(50); 8 } else if ( ball.y + ball.size >= bar.y - bar.height && ball.y - ball.size <= bar.y + bar.height) { 9 10 ball.vx *= -1; 11 12 } 13 14 }//ここまでバーの当たり判定 15 16 //ここからブロックとボールの当たり判定 17 for( int i = 0;i< num ;i++ ) { 18 for (int j = 0; j< 10 ;j++ ) { 19 20 if (ball.y + ball.size >= block[i][j].y - height && ball.x - ball.size <= block[i][j].x + Block.WIDTH && ball.x + ball.size >= block[i][j].x - width) { 21 ball.vy *= -1;//上の反発 22 Points count = new Points(); 23 count.count(50); 24 } 25 if (ball.y - ball.size <= block[i][j].y + height && ball.x - ball.size <= block[i][j].x + width && ball.x + ball.size >= block[i][j].x - width) { 26 ball.vy *= -1;//下の反発 27 Points count = new Points(); 28 count.count(50); 29 } 30 if (ball.x + ball.size >= block[i][j].x - width && ball.y - ball.size <= block[i][j].y + height && ball.y - ball.size >= block[i][j].y - height) { 31 ball.vx *= -1;//左 32 Points count = new Points(); 33 count.count(50); 34 } 35 if (ball.x - ball.size <= block[i][j].x + width && ball.y - ball.size <= block[i][j].y + height && ball.y - ball.size >= block[i][j].y - height) { 36 ball.vx *= -1;//右 37 Points count = new Points(); 38 count.count(50); 39 } 40 } 41 42 } 43 44 45 46 47 }