アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在directxを用いた(DXライブラリは使わない)インベーダーゲームを作っているのですが、当たり判定の部分がなぜかうまくいきません。自機と敵の弾の当たり判定部分のコードを載せるのでどなたかご享受ください。


//============敵の攻撃========================
if(enemy[rand_atk].tamaflag == 0 && shot_save % 100 == 0 ){
__enemy[rand_atk].tamaflag = 1;
__enemy_atk[rand_atk].x = enemy[rand_atk].x+17;
__enemy_atk[rand_atk].y = enemy[rand_atk].y+17;
}

for(i = 0; i < 11; i++){
__if(enemy[i].tamaflag == 1){
____enemy_atk[i].y+=1;
____if(enemy_atk[i].y >= 480){
______enemy[i].tamaflag = 0;
______enemy_atk[i].y = -20;//画面外へ
____}

____if( ( move.x - 7 < enemy_atk[i].x && move.x + 32 > enemy_atk[i].x ) &&
________( move.y - 13 < enemy_atk[i].y && move.y + 24 > enemy_atk[i].y ) ){
______move.zanki--;
______enemy[i].tamaflag = 0;
______enemy_atk[i].y = -20;//画面外へ
____}
__}
}

move.x,move.yは自機のx,y座標で横32縦24
敵の弾の大きさは横7縦13
rand_atkはrand_atk = timeGetTime() % 11;でランダムに攻撃させようとしています。

A 回答 (1件)

何がどううまくいってないか、まずは現状分析してみましょう(避けられない、とか、当らない、とか、遠くから当るとか...)


あなた自身で考えるにしても、私達が考えるにしても、まずはそこが出発点です。

・32x24の自機のどこかに7x13の弾が重なれば「当たり」
・座標は左上基準
でよろしいですか?

それだと、
>____if( ( move.x - 7 < enemy_atk[i].x && move.x + 32 > enemy_atk[i].x ) &&
>_______( move.y - 13 < enemy_atk[i].y && move.y + 24 > enemy_atk[i].y ) ){
この判定式自体はあっているように見えます。
ただ
・座標が各中心基準なら間違い
・move.x, move.y,enemy_atk[i].x ,enemy_atk[i].yの型はなんでしょう?unsignedだと move.x - 7 などが負にならず、画面端だと当らないことになります。
・当ったときの処理が、無条件で繰り返されています。同時に2つ当ると、残機が2つ減ります。
    • good
    • 0
この回答へのお礼

すみません。自己解決しました。
更新処理内での頂点座標の設定が間違っていただけでした。申し訳ないです。

お礼日時:2011/08/09 21:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!