シューティングゲームについて

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

シューティングゲームについて

#1

投稿記事 by 探究者 » 18年前

初めまして。シューティングゲームの館を参考にして、ゲームを作っています。といっても書いてある通りにつくっているだけなのですが・・・・
今20節まで進んでいますが、詰まってしまいました。C言語自体初めて少ししかたっていないのでとても困っています。僕が実装したいのは敵の玉と自機の当たり判定、敵と自機との当たり判定。また当たった時の、敵が消えた時と同じように、自機の消滅処理、そしてその際の画像表示です。
19節のプレイヤーと敵との当たり判定と同じようにすればいいかと思ったのですがうまくいきません。
img_sound_load.cppとGlobalVariable.h、ExternGV.hは19節を参考にプレイヤーの消滅音、構造体にrangeを付け加えました。少し急ぐ必要があったので急ピッチで作ってきたせいか、自分で付け加えるのは難しいです。
どの部分にどうやって何を付け加えればいいのか、丸投げしているようで悪いのですが、なるべく詳しく教えてください。9節と10節の内容だけは飛ばしています。どうかよろしくお願いします。

管理人

Re:シューティングゲームについて

#2

投稿記事 by 管理人 » 18年前

すみません、遅れました。
私も丁度シューティングを作っているところでした。
今日中にほかのとぴでアップするので、よかったら見てください☆

なんか途中になってしまっていていろんな人に迷惑かけてますんね、ごめんなさい(_ _|||)
当たり判定は
敵の情報の中にenemy.rangeとでもしておいて、自機との距離、弾との距離を計算すればいいでしょう。
当たり判定については
http://l.huu.cc/g/#s11
ここで紹介しているので、よければご覧下さい。

当たり判定のチェックには総当りで調査する方法と、必要な分だけ、登録、調査する方法とあると思います。
後者は少しややこしいので、前者でやってみると、
単純に、全部の弾のフラグを調査し、表示されている弾と全部の敵の表示されているフラグを調査し、敵とを比較する方法です。
たとえば、

int range(計算する座標を受け取る){
    if(当たりなら)
        return 1;
    return 0;
}

...(略)

for(i=0;i<全弾の数;i++){
    if(弾.flag==1){//弾の表示がオンなら
        for(j=0;j<全敵の数;j++){
            if(敵.flag==1){//敵の表示がオンなら
                if(range()==1){
                    消滅アクション;
                    弾のフラグを落とす;
                    敵のフラグを落とす;
                    break;
                }
            }
        }
    }
}
 

こんな感じで調査してやれば全部の比較が出来ると思います。
この数が異様に高くなってきたら気をつけてください。
設定上、敵の最大数10000、弾の最大数10000とかにしてしまうと、総当りの調査はここだけで1億回になってしまいます。
総当りの計算は計算量が多くなってしまうので、その点注意してください。

もし余裕があれば、配列や線形リストを使ったりして登録・検索・削除出来るような形にしてみるといいと思います。

探究者

Re:シューティングゲームについて

#3

投稿記事 by 探究者 » 18年前

返信してもらって申し訳ありませんが、返信してもらったのは自機の玉と敵との当たり判定で、僕が教えてほしいのは敵の玉と自機の当たり判定、そして敵と自機との当たり判定です。
また、敵は MONSTER1_X_SIZE 140.0、MONSTER1_Y_SIZE 128.0とenemy.sizeでサイズを定義しているのに、自機のサイズが定義されていなくて困っています。
player.cppでPLAYER_MAX_SHOT1 11 、 PLAYER_MAX_SHOT2 15を用いていますが、ENEMY_TOTAL_NUM 100
ENEMY_TOTAL_SHOT_NUM 200をそのまま用いていいのでしょうか?
また計算式とプログラムがわかってもどのソース、どの部分に付け加えればいいのかがわかりません。
たびたびすいませんがなるべく詳しくご教授よろしくお願いします。

管理人

Re:シューティングゲームについて

#4

投稿記事 by 管理人 » 18年前

自機の弾と敵の当たり判定も、
敵の弾と自機の当たり判定も、同じ理論です。
全ての表示されている弾と、自分との距離を計算して、範囲内ならアウトにすればいいでしょう。

自機の当たり判定はご自分で定義されたらいいと思います。
定義が書いてある場所に自分の好きな名前で定義すればいいでしょう。

#define CH_RANGE 10

など・・。
私の作るゲームでは

#define CH_RANGE 2.6

にしています。

自機の当たり判定プログラムはまだ作られていないので、別に新しく作るといいと思います。
別にどこに作ってもいいし、順番は敵の方を計算してからでも、自機の方を計算してからでも、弾を発射してからでも、前でも別にいいと思います。
一般的にはうった後だと思いますが、それが1/60秒どちらになるかだけの話ですから。

自機との距離を計算する時も、sqrtを用いてピタゴラスの定理でとけばいいと思います。
あたったら、何かモーションをつけないとおかしくなりますし、自機無敵時間も作らなければ成らなくなりますので、注意してください。
無敵時間を作らないと接触中常に当たりというエフェクトが出てしまいます。

閉鎖

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