今私はブロック崩しを作っています。
しかし、どうもブロックにボールがあたったときブロックの動作がうまくいきません。無敵ブロックにボールがあたったときたまにボールがすり抜けてしまいます。これについては2つのブロックに同時にあたって判定されているのが問題だと思い、
if(HitBallandBlock(block1[i][j],pt,&needleflag) == TRUE ||
(HitBallandBlock(block1[i][j],pt,&needleflag) == TRUE && HitBallandBlock(block1[i-1][j],pt,&needleflag) == TRUE) ||
(HitBallandBlock(block1[i][j],pt,&needleflag) == TRUE && HitBallandBlock(block1[i+1][j],pt,&needleflag) == TRUE) ||
(HitBallandBlock(block1[i][j],pt,&needleflag) == TRUE && HitBallandBlock(block1[i][j-1],pt,&needleflag) == TRUE) ||
(HitBallandBlock(block1[i][j],pt,&needleflag) == TRUE && HitBallandBlock(block1[i][j+1],pt,&needleflag) == TRUE)){
}
というようにしましたが、駄目でした。
下記のサイトにソースをアップしてあります。パスワードは「YT2013」です。
ttp://www1.axfc.net/uploader/so/2869965
ブロック全体の当たり判定の設定はblock.cppにボールがブロックにあたったときのボールの計算はball.cppのHitBallandBlock関数になります。
今は、ブロックの各4辺とボールが当たった時と
ブロックの上の辺と左右の辺、下の辺と左右の辺が当たった時にボールの移動する向きを変えるようにしています。なにか別にいいやり方がある場合アドバイスいただけたらありがたく思います。
一応アップしたファイル内に問題点がわかりやすいよう動画を入れてあります。
(1)右上にある青いブロックにあたったときボールがおかした動きをする(上記の変更のせいだと思います。)
(2)無敵ブロック(ねずみ色のブロック)にボールがあたったときボールがブロックをすり抜ける。