しかし、この敵弾の当たり判定を行う際に不具合が出てしまい、10日ほど思い悩んでしまっているために今回質問を投稿させていただきました。
その不具合というものが、『敵弾の当たり判定矩形が全て、敵弾画像と違った一定地点から射出され、左上45°か右下45°の角度にしか進まず、弾速もそれぞればらばら』というものです。
龍神録を参考としたため、ソースコードのほとんどの基本構造は龍神録と同様のものになっており、異なる点は関数名と座標指定、座標成分を用いた矩形判定を行っている程度のもので、両者にさほど大きな違いはありません。
※
参考までに、ほとんどの当たり判定はこのような記述方法と同様のもので行っております。画像の中心点座標を始点に左上頂点座標と右下頂点座標を求めて矩形を作り、座標成分による判定を行うというものです。
//===============================================
//■敵弾の当たり判定範囲
// ※左上座標 (eneshot.enebullet[n].x+A, eneshot.enebullet[n].y+B)
// ※右下座標 (eneshot.enebullet[n].y+C, eneshot.enebullet[n].y+D)
//===============================================
int enebullet_range_A[ENEBULLET_RANGE_MAX]={
-5, //bul_knd 0 敵通常弾
-100,
-100,
-100
};
int enebullet_range_B[ENEBULLET_RANGE_MAX]={
-5,
-100,
-100,
-100
};
int enebullet_range_C[ENEBULLET_RANGE_MAX]={
5,
100,
100,
100
};
int enebullet_range_D[ENEBULLET_RANGE_MAX]={
5,
100,
100,
100
};
//===============================================
//■自機の当たり判定範囲 ※左上(ch.x+A,ch.y+B) ※右下(ch.x+C,ch.y+D)
//===============================================
int ch_range_A =-8; int ch_range_B =-10;
int ch_range_C =20; int ch_range_D =20;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//===============================================
//■敵弾と自機との当たり判定をする関数
//===============================================
int out_judge_eneshot(int s,int n){
if(eneshot.enebullet[n].cnt>0){//敵弾の軌道が一度でも計算されていたら
//◇敵弾・当たり判定矩形◇
double x1 =eneshot.enebullet[n].x+enebullet_range_A[eneshot.enebullet[n].bul_knd];
double y1 =eneshot.enebullet[n].x+enebullet_range_B[eneshot.enebullet[n].bul_knd];
double x2 =eneshot.enebullet[n].x+enebullet_range_C[eneshot[s].enebullet[n].bul_knd];
double y2 =eneshot[s].enebullet[n].x+enebullet_range_D[eneshot[s].enebullet[n].bul_knd];
//◇自機・当たり判定矩形◇
double x3 =ch.x+ch_range_A;
double y3 =ch.y+ch_range_B;
double x4 =ch.x+ch_range_C;
double y4 =ch.y+ch_range_D;
//◇オーバーフロー対策
if(eneshot[s].enebullet[n].bul_knd>=ENEBULLET_RANGE_MAX)
printfDx("out_judge_chshot_ground関数内オーバーフロー\n");
//◇当たり判定内なら
if(x1<x4 && x3<x2 && y3<y2 && y1<y4)
return 1;//当たり
}
return 0;
}
※
当初は、敵弾情報を受け渡しするポインタを用いていない事による、変数値の不具合かと思い手直しをしたのですが、座標成分を用いた矩形判定に有用性を見出すことが出来ず、また龍神録と同様の使用法で変数を用いているため結果的に変わらず、上手く解決することが出来ませんでした。
この問題で10日ほど悩みながら何度も手直しを行いましたが、原因・解決法がどうやら自分一人では気づくことの出来ないところにあるようです。そこで皆様にお願いがあるのですが、もしよろしければお力添えを頂けないでしょうか。
ソースコードは龍神録と同様の構造をとっており、一口にソースコードを記述することが難しいため、大変恐縮ですがアップローダーに上げたファイルとさせて頂きました。
ソースコードファイルURL:
http://www1.axfc.net/uploader/Ne/so/92698.zip&key=cosin
大変お手数をお掛けしますが、何か気になる点やアドバイスなど頂けると大変嬉しいです。よろしくお願いいたします。
