自機が発射する弾と敵機の矩形あたり判定について
考えていますが、想定通りにならずに困っています。
当たり判定に必要な情報は
画像の位置と
画像のサイズ(縦と横)
が
2画像分(今回は敵機と自機が発射する弾)
あれば作成できると考えています。
敵機には配列を使って画像をコピーしています。
敵機は向かって右から左に向かって移動していきます。
ソースは下記のように作成しています。
※上記に挙げた情報は全て取得できています。情報は別のクラスから取得して持って来ています。
void atari_hantei(int[][] ew, int[][] eh, int pw, int ph, int sw, int sh){
//敵機の画像情報取得
ew = enemys.get_width();
eh = enemys.get_height();
//自機の画像情報取得
pw = player1.width_size();
ph = player1.height_size();
//弾の画像情報取得
sw = shot.width_size();
sh = shot.height_size();
//X1 + W1 < X2
//=弾の横位置(shot_yoko) + 弾画像の横幅(sw) < 敵機の横位置(enemy_yoko)
//X1 > X2 + W2
//=弾の横位置(shot_yoko) > 敵機の横位置(enemy_yoko) + 敵機画像の横幅(ew[num_x][num_y])
//Y1 + H1 < Y2
//=弾の縦位置(shot_tate) + 弾画像の縦幅(sh) < 敵機の縦位置(enemy_tate)
//Y1 > Y2 + H2
//=弾の縦位置(shot_tate) > 敵機の縦位置(enemy_tate) + 敵機画像の縦幅(eh[num_x][num_y])
if(shot_life == 1){
for(int num_x = 0; num_x < 5; num_x++){
for(int num_y = 0; num_y < 5; num_y++){
if(enemy_life[num_x][num_y] == 1){
int enemy_num = ew[num_x][num_y] * eh[num_x][num_y]; println(enemy_num); if(shot_yoko + sw < enemy_yoko || shot_yoko > enemy_yoko + ew[num_x][num_y] || shot_tate + sh < enemy_tate || shot_tate > enemy_tate + eh[num_x][num_y]){ println("当たってない"); }else{ println("当たり"); } shot_life = 0; enemy_life[num_y][num_x] = 0; enemy_num --; } } }
}
}
##########################################################################
上記のソースが目指しているものは、当たり判定後、当たった敵機の画像が格納されている
配列を調べて、一台ずつ消していくということを目指しています。
この手の処理に詳しい方いらしたら、御教示のほどよろしくお願い致します。