スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

当たり判定クラス

BGM4週 合計48

 さらにライブラリ実装&設計。
 突然プログラムの話題ばかりで誰も付いてきてないだろうが気にしない(`・@・)

 結局のところコピーコンストラクタを禁止しておくのが一番安全なのでそうした。
ガベージコレクタ実装したら全部解決するけど、処理のオーバーヘッド云々とか、実装が面倒とかあるのでスルー。

 当たり判定の関数はポリモーフィズムとオーバーロードの組み合わせで見かけ上は一つの関数で行くドン。

 まず図形を現すクラスを作ります。

 Shapesを継承するクラスは例えば
 Point(2点)
 Rect(中心と大きさの2点)
 Circle(中心と大きさ)
 Line(始点と終点と太さ)
 Square(四点であらわす四角形)
 Triangle(三角形)
 
 で衝突判定

 bool Collision( const Point &A , const Point &B)
 bool Collision( const Point &A , const Rect &B)
          ・
          ・
          ・
 例えばこの場合の組み合わせで全15個作ります。
 
 で敵クラスを作って、それを継承して敵Aクラスとか敵Bクラスを作ります。
で敵クラスはどの種類も全部 Enemy の配列にいれます。
 弾クラスもおんなじ感じにして弾Aクラス、弾Bクラスとかを作ります。
 
 で当り判定の開始

 shotlist[s].Col( enelist[e] )と呼びます

 Col( enemy ene ){
   return ene.col( this.line );
}
 ってなって

Col( Line line){
    return collision( ene.rect , line );
 }

 太字部分は敵クラスによって違いますが種類の違いを勝手に分けて当り判定の処理が出来てみんなハッピーになるわけですね(^@^)

 あとはenemyの親クラスにCol(図形の種類)に6種類作っておいて、これ以外の形の当り判定を持っている敵はなんか色々頑張ればいいですね。

 追記:
 と思ったけど、この場合Enemyの親クラスにRectメンバーがないとene.Colが純粋仮想関数になるね(´・@・)
まぁシューティングの敵なんて大体四角なので、たまにいる丸い敵も四角のデータ領域を確保しないといけないとしてもそれは許されるよな。

 プログラムって簡単ですね!

 アンケートだとまったく期待されてないけどサンプルゲームはシューティングにしようかな。説明しやすい。
スポンサーサイト

コメントの投稿

Secre

プロフィール

(´・@・)

Author:(´・@・)
ゲームの製作日誌です
 コメントは返事するけど、拍手コメントは返さない事があります。

メール:mr.dagonn★gmail.com
★を@に変えて下さい

twitter(更新情報をつぶやくbot)
アカウント

●公開しているゲーム
Vector作者ページ

●アンケート
FBSアンケート

TDアンケート

●バグ報告/質問/感想 掲示板
掲示板

●製作中のゲームライブラリ
SDXフレームワーク

●3DSのフレンドコード
2363-5987-4359
スマブラとかやってる

●自由ソフトウェア財団の賛助会員です
[FSF Associate Member]

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。