何度も同じようなこと書いて申し訳ございません。
ブロックとボールとの当たり判定はバーとボールと同じように
上下の辺にボールが触れるとball.dy*= -1、左右の辺にボールが触れるとball.dx*= -1というようにしました。
たまにボールが不規則な動きをしていたのですが、ずっと当たり判定のことばかり考えていてほかのことも進めたかったので無視していました。
しかし、クリア条件でブロックを消すたびblocknumber が+1されていって一定の値になったときクリアというようにしたのですが、
なぜかブロックが残っている状態でクリアとなってしまうことがあります。ファイルに入っている動画では3つ残った状態ですが2つ残った状態でもなりました。また、全部消しても
クリアにならない場合もありました。
おそらくボールがちょうど横の辺と縦の辺を同時に当たり判定の条件を満たしているの
だと考えています。当たり判定の条件をどのようにするのが一番良いのかよろしければ教えてください。
一応、原因が別にある可能性もありますのでファイルを下記のサイトに上げました。パスワードは「YT2013」です。
http://www1.axfc.net/uploader/Si/so/151809
よろしくお願いします。
ブロック崩し:当たり判定
Re: ブロック崩し:当たり判定
クリア判定のほうはアドバイス頂いたとおり
というふうにしたらなんとかなりました。
ボールの不規則な動きについては縦と横の当たり判定両方入ったため変な動きになっていると思ったため縦、横両方両方に入っているときの動きを追加してみたのですが
特に変化はなかったです。
if(HitLineandCircle(pt[0],ball.hit) == TRUE ||
HitLineandCircle(pt[1],ball.hit) == TRUE ||
HitLineandCircle(pt[2],ball.hit) == TRUE ||
HitLineandCircle(pt[3],ball.hit) == TRUE){
blocknumber++;
}
ボールの不規則な動きについては縦と横の当たり判定両方入ったため変な動きになっていると思ったため縦、横両方両方に入っているときの動きを追加してみたのですが
特に変化はなかったです。
//上と左または右の線に当たってる場合
if((HitLineandCircle(pt[0],ball.hit) == TRUE && HitLineandCircle(pt[1],ball.hit) == TRUE)||
(HitLineandCircle(pt[0],ball.hit) == TRUE && HitLineandCircle(pt[2],ball.hit) == TRUE))
{
block1[i][j].flag = 1;
ball.hit.pos.y = block1[i][j].hit.lt.y - 7;
ball.dy*= -1;
blocknumber +=1;
//上と左または右の線に当たってる場合
}else if((HitLineandCircle(pt[3],ball.hit) == TRUE && HitLineandCircle(pt[1],ball.hit) == TRUE)||
(HitLineandCircle(pt[3],ball.hit) == TRUE && HitLineandCircle(pt[2],ball.hit) == TRUE))
{
block1[i][j].flag = 1;
ball.hit.pos.y = block1[i][j].hit.rb.y + 7;
ball.dy*= -1;
blocknumber +=1;
}else{
//ひとつの線しかあたっている場合
if(HitLineandCircle(pt[0],ball.hit) == TRUE){
block1[i][j].flag = 1;
ball.hit.pos.y = block1[i][j].hit.lt.y - 7;
ball.dy*= -1;
blocknumber +=1;
}
if(HitLineandCircle(pt[3],ball.hit) == TRUE){
block1[i][j].flag = 1;
ball.hit.pos.y = block1[i][j].hit.rb.y + 7;
ball.dy*= -1;
blocknumber +=1;
}
if(HitLineandCircle(pt[1],ball.hit) == TRUE){
block1[i][j].flag = 1;
ball.hit.pos.x = block1[i][j].hit.rb.x -7;
ball.dx*= -1;
blocknumber +=1;
}
if(HitLineandCircle(pt[2],ball.hit) == TRUE){
block1[i][j].flag = 1;
ball.hit.pos.x = block1[i][j].hit.rb.x +7;
ball.dx*= -1;
blocknumber +=1;
}
}
Re: ブロック崩し:当たり判定
すみません自己解決しました。
おそらく、ボールがブロックにめり込むようにならないよう、ボールがブロックにあたったとき、ボールの位置をずらしていたのが行けなかったのだと思います。
おそらく、ボールがブロックにめり込むようにならないよう、ボールがブロックにあたったとき、ボールの位置をずらしていたのが行けなかったのだと思います。