ボスと敵の当たり判定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
けいすけ

ボスと敵の当たり判定

#1

投稿記事 by けいすけ » 16年前

龍神録の50章を改造してます。
ボスや敵の弾幕ではなく、ボスと敵自体に当たり判定をつけて
自機と接触した場合は自機が死ぬという感じで実装してみたいのですが
どんな感じの順序で作ればいいでしょうか?アドバイスお願いします。

TRUTH

Re:ボスと敵の当たり判定

#2

投稿記事 by TRUTH » 16年前

こんにちはー。初めまして


ボスや敵自体に当たり判定をつけるときは
基本的に弾幕のときと同じです。

キャラと敵の当たり範囲を使用して
接触しているかどうか調べます。

キャラと敵とボスの当たり範囲
#define ENEMY_RANGE_MAX 4
#define CSHOT_RANGE_MAX 2
#define BRANGE 40.0
//当たり判定
//ショットの座標:1  当たりを判定する物体:2
int out_judge(double x1, double y1, double x2, double y2,
              double range1, double range2, double spd1,double angle1){
    int j;
    double x=x1-x2;//敵と自機ショットとの距離
    double y=y1-y2;
    //敵の当たり判定と自機ショットの当たり判定の合計範囲
    double r=range1+range2;
    //中間を計算する必要があれば
    if(spd1>r){
        //1フレーム前にいた位置を格納する
        double pre_x=x1+cos(angle1+PI)*spd1;
        double pre_y=y1+sin(angle1+PI)*spd1;
        double px,py;
        for(j=0;j<spd1/r;j++){//進んだ分÷当たり判定分ループ
            px=pre_x-x2;
            py=pre_y-y2;
            if(px*px+py*py<r*r)
                return 1;
            pre_x+=cos(angle1)*r;
            pre_y+=sin(angle1)*r;
        }
    }
    if(x*x+y*y<r*r)//当たり判定内なら
        return 1;//当たり
    return 0;
}
out.cpp内の「弾幕と接触してるかの判定」を参考にしてみてください。
当たっていたら,死亡させると言う流れになります。

けいすけ

Re:ボスと敵の当たり判定

#3

投稿記事 by けいすけ » 16年前

double spd1,double angle1がどう置き換えるべきか悩んでるんですけど
これはいらないのでしょうか?

yu

Re:ボスと敵の当たり判定

#4

投稿記事 by yu » 16年前

ボスの前回と今回の位置から、ピタゴラスの定理を使って速さを出し、
atan2 で角度を出すのが簡単だと思います

atan2 で引数に 0 を渡さないように注意してください

けいすけ

Re:ボスと敵の当たり判定

#5

投稿記事 by けいすけ » 16年前

ちょっと聞きたいのですが
//当たり判定
//ショットの座標:1  当たりを判定する物体:2
int out_judge(double x1, double y1, double x2, double y2,
              double range1, double range2, double spd1,double angle1){
    int j;
    double x=x1-x2;//敵と自機ショットとの距離
    double y=y1-y2;
    //敵の当たり判定と自機ショットの当たり判定の合計範囲
    double r=range1+range2;
    //中間を計算する必要があれば
    if(spd1>r){
        //1フレーム前にいた位置を格納する
        double pre_x=x1+cos(angle1+PI)*spd1;
        double pre_y=y1+sin(angle1+PI)*spd1;
        double px,py;
        for(j=0;j<spd1/r;j++){//進んだ分÷当たり判定分ループ
            px=pre_x-x2;
            py=pre_y-y2;
            if(px*px+py*py<r*r)
                return 1;
            pre_x+=cos(angle1)*r;
            pre_y+=sin(angle1)*r;
        }
    }
    if(x*x+y*y<r*r)//当たり判定内なら
        return 1;//当たり
    return 0;
}
は新しく作り直す必要はあるのでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る