自分は今シューティングを作っています
関数を
・main
・Player
・Enemy
の3つに分けています
・mainの関数には「Player」「Enemy」に書いたそれぞれの関数の呼び出し
・Playerには自機に関すること
(座標、弾、など)
・Enemyには敵に関すること
(座標、移動、など)
上を前提に質問があります
敵、自分のそれぞれの当たり判定をつけたいのですが、
敵の当たり判定をつくるには、敵の座標と、自機の弾の座標が必要で、
自機の当たり判定を作るには、敵の弾の座標と、自機の座標が必要です
しかし、それぞれ別のファイルに書き込んでいるので、同時に干渉することが出来ません。
どのようにして、当たり判定を作ればよいでしょうか?
当たり判定
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 当たり判定
まず、使われている言語はCですか?C++ですか?
Cであれば
ゲームプログラミング設計
http://dixq.net/g/
この辺を参考にどうぞ。
C++であれば、座標が取得できるようなインターフェイスクラスを定義し、それを継承してPlayerやEnemyを実装し、
座標を取得する必要があるクラスへインスタンスのポインタを渡してやればよいと思います。
上記の内容を実装したサンプルを書きました。
添付ファイルにクラス図を書いていますので合わせてご覧ください。
「座標が取得できるようなインターフェイスクラス」をPosGettableとして定義します。
Playerはそれを継承します。
mainはPlayerもEnemyも持っているので、mainがPlayerのインターフェイスをEnemyに渡します。
EnemyはPlayerの基底クラスのポインタを持っているので、EnemyからPlayerの座標が参照できます。
実行結果
10.00000,20.00000
Cであれば
ゲームプログラミング設計
http://dixq.net/g/
この辺を参考にどうぞ。
C++であれば、座標が取得できるようなインターフェイスクラスを定義し、それを継承してPlayerやEnemyを実装し、
座標を取得する必要があるクラスへインスタンスのポインタを渡してやればよいと思います。
上記の内容を実装したサンプルを書きました。
添付ファイルにクラス図を書いていますので合わせてご覧ください。
「座標が取得できるようなインターフェイスクラス」をPosGettableとして定義します。
Playerはそれを継承します。
mainはPlayerもEnemyも持っているので、mainがPlayerのインターフェイスをEnemyに渡します。
EnemyはPlayerの基底クラスのポインタを持っているので、EnemyからPlayerの座標が参照できます。
#include<stdio.h>
class PosGettable {
public:
virtual ~PosGettable(){}
virtual float GetX() = 0;
virtual float GetY() = 0;
};
class Player : public PosGettable{
float x, y;
public:
Player(){x=10;y=20;}
float GetX() override {
return x;
}
float GetY() override {
return y;
}
};
class Enemy {
PosGettable* m_pPlayerPosGetter;
public :
Enemy(PosGettable* impl){
m_pPlayerPosGetter = impl;
}
void show(){
printf("%f,%f",
m_pPlayerPosGetter->GetX(),
m_pPlayerPosGetter->GetY()
);
}
};
int main(){
Player player;
Enemy enemy((PosGettable*)&player);
enemy.show();
}
10.00000,20.00000
- 添付ファイル
-
- class.png (32.88 KiB) 閲覧数: 1463 回