当たり判定

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

当たり判定

#1

投稿記事 by モクベ » 8年前

自分は今シューティングを作っています


関数を
・main
・Player
・Enemy

の3つに分けています


・mainの関数には「Player」「Enemy」に書いたそれぞれの関数の呼び出し



・Playerには自機に関すること
(座標、弾、など)



・Enemyには敵に関すること
(座標、移動、など)




上を前提に質問があります


敵、自分のそれぞれの当たり判定をつけたいのですが、
敵の当たり判定をつくるには、敵の座標と、自機の弾の座標が必要で、

自機の当たり判定を作るには、敵の弾の座標と、自機の座標が必要です




しかし、それぞれ別のファイルに書き込んでいるので、同時に干渉することが出来ません。


どのようにして、当たり判定を作ればよいでしょうか?

アバター
へにっくす
記事: 630
登録日時: 8年前
住所: 東京都

Re: 当たり判定

#2

投稿記事 by へにっくす » 8年前

モクベ さんが書きました:自機の当たり判定を作るには、敵の弾の座標と、自機の座標が必要です
ふーん

敵の弾なら死ぬけど、敵に当たっても死なないのね?


突っ込んでみるw

別々のファイルに書き込んでいるんだったら、
プログラム内のメモリにそれを読み込む必要があるのは分かるよね。
まずはそれぞれの構造体を作ってみたらどうかな?
written by へにっくす

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 当たり判定

#3

投稿記事 by Dixq (管理人) » 8年前

まず、使われている言語はCですか?C++ですか?

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
class.png (32.88 KiB) 閲覧数: 461 回

モクベ

Re: 当たり判定

#4

投稿記事 by モクベ » 8年前

へにっくす さんが書きました:敵の弾なら死ぬけど、敵に当たっても死なないのね?

ありがとうございます! まったく、気がつきませんでした。



Dixq (管理人) さんが書きました:まず、使われている言語はCですか?C++ですか?

自分はCを使ってます。
貼られているサイトを参考に1個づつ勉強していこうと思います




お二方、回答ありがとうございました

閉鎖

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