衝突判定…
Posted: 2013年11月06日(水) 05:42
オブジェクトリストからプレイヤーだけを取出し、
障害物の位置が記載されているマップ配列と衝突判定するプログラムで
衝突すると止まる、という処理をさせています。
(障害物の四面、どこから当たったかを判定してしています)
が、障害物の画像とはズレた場所で衝突しています。
衝突処理の部分のプログラムがおかしいということはわかっているのですが、、
悩み、弄り、を繰り返し、もうどこが間違っているのか、よくわからなくなりました。
あたり判定を何度も触ってこられた方なら一目で
間違っている部分がわかるかと思います。
すみませんが、このバカにどこがおかしいのか
教えてやってください。
障害物の位置が記載されているマップ配列と衝突判定するプログラムで
衝突すると止まる、という処理をさせています。
(障害物の四面、どこから当たったかを判定してしています)
が、障害物の画像とはズレた場所で衝突しています。
衝突処理の部分のプログラムがおかしいということはわかっているのですが、、
悩み、弄り、を繰り返し、もうどこが間違っているのか、よくわからなくなりました。
あたり判定を何度も触ってこられた方なら一目で
間違っている部分がわかるかと思います。
すみませんが、このバカにどこがおかしいのか
教えてやってください。
リストの頭からケツまで移動するfor文の中です
イテレータは宣言してます
ここでは左側にあるブロックとの衝突判定を記載します。
16×16の障害物画像に対して、左側から主人公がかなりめり込んでからストップしますし、
X軸が少しずらすともう左に通過してしまいます。
どうやら障害物のあたり判定の幅がうまく機能していない様に思います。
障害物はMAPCHIP_SIZE(16)で判定をとっているはずなのに、です。
ちなみに主人公の画像imageサイズは20×20で、
主人公のあたり判定サイズboundsは16×16にしています。
//左側にあるブロックとの判定
if((*it)->プレイヤーである && (*it)->進行方向が左である){
int j =(int)((*it)->getposX())/MAPCHIP_SIZE;
int i =(int)((*it)->getposY() + ((*it)->getimage_h() - (*it)->getbounds_h())/2-1)/MAPCHIP_SIZE;
if(マップ配列[i][j] == 障害物である){
if( (*it)->getposX() + ((*it)->getimage_w() + (*it)->getbounds_w())/2 > j*MAPCHIP_SIZE &&
(*it)->getposX() + ((*it)->getimage_w() - (*it)->getbounds_w())/2 < j*MAPCHIP_SIZE + MAPCHIP_SIZE &&
(*it)->getposY() + ((*it)->getimage_h() + (*it)->getbounds_h())/2 > i*MAPCHIP_SIZE &&
(*it)->getposY() + ((*it)->getimage_h() - (*it)->getbounds_h())/2 < i*MAPCHIP_SIZE + MAPCHIP_SIZE)
{
//判定後の処理
(*it)->ストップ!
}
}
}
//右側にあるブロック~以下省略