ページ 11

C++ ゲーム設計とクラスの宣言について

Posted: 2011年8月27日(土) 20:30
by T
分かりやすく書いたつもりなのですが、文章で説明するのは苦手なので、
説明不足な点があれば言ってください。


はじめまして。Tと申します

私はSTGを製作しようと思って、以下のようなシステムで設計をしようと考えているのですが、
クラスの宣言位置や、他のクラスの参照などで分からないことがあり、戸惑っています。

全体の流れはこのような感じです

コード:

メイン関数
↓
ファクトリークラス
{
	・オブジェクト(自機、敵など)のポインタを収納する配列
	・オブジェクトの生成用のスタック(配列)
	・オブジェクトを作る関数
	・オブジェクトを破棄する関数
}
↓
各オブジェクトの処理
↓
ループ

分からないところがあるのは、オブジェクトの生成についてです

・オブジェクトの生成用のスタック(配列)
(ちなみに、スタックと書いてありますが実際はただの構造体の配列です。概念的にはスタックです)
これは、自機などのオブジェクトが、このスタックに
obj(種類,座標,速度,向き・・・)というような情報をつめて
ファクトリークラスがそのスタックに溜まっている情報を元にオブジェクトを生成する、ということなのですが
どうやってファクトリークラスに情報を渡せばいいのかが分かりません・・・

たとえば、

コード:

ファクトリークラス
{
	・オブジェクトを作る関数
	{
		if ( obj.種類==敵A ) 敵Aを生成
		if ( obj.種類==自機弾 ) 自機弾を生成
		・・・
	}

}

敵Aクラス
{
	・メイン処理関数
	{
		ファクトリークラスにオブジェクトを生成するための情報を渡す
		・・・
	}
}

自機弾クラス
{
	・メイン処理関数
	{
		ファクトリークラスにオブジェクトを生成するための情報を渡す
		・・・
	}
}
このようにすると、ファクトリークラスの後に敵Aクラスを宣言してるので、
敵Aの情報がファクトリークラスに伝わっていなく、そこで、宣言順を逆にすると
敵Aがファクトリークラスにオブジェクトを生成しようとスタックに情報を詰める時に、
ファクトリークラスの情報が敵Aが伝わっていなく・・・
というような状態になってしまいます。

つまり、敵A、自機弾クラスがファクトリークラスのスタックにオブジェクト生成用の
情報を与えられて、かつファクトリークラスが敵A、自機弾を生成できればいいのですが・・・
そこをどうすればいいのか、何も思いつきません・・・

もし、この方法だと不都合が生じるというのであれば、
できるだけ簡単で分かりやすい方法を教えてくださるとありがたいです。

どなたかご教授お願いします

Re: C++ ゲーム設計とクラスの宣言について

Posted: 2011年8月27日(土) 21:14
by h2so5
ファクトリークラスによって生成されるクラスである「敵Aクラス」「自機弾クラス」に、
「ファクトリークラスにオブジェクトを生成するための情報を渡す」処理が入っている意味がよく分かりません。

実際の工場に例えると、
製品(オブジェクト)を作るための情報(設計図とか?)を持っているのは工場(ファクトリー)のはずですよね。
工場によって作られる製品(オブジェクト)が工場に情報を教えるっておかしくないですか?

Re: C++ ゲーム設計とクラスの宣言について

Posted: 2011年8月27日(土) 21:14
by (回答者)
前方宣言という物を使えば実現できませんでしょうか。

class A; // 前方宣言

class B{ A *m_pAClass; };
class A { なんらかの変数、メソッド };

class A ; と先に書いておく事で class B に class A の情報を予め教えておく事が可能です。

Re: C++ ゲーム設計とクラスの宣言について

Posted: 2011年8月28日(日) 00:34
by T
返信ありがとうございます

>h2so5さん
説明不足でした・・・
「ファクトリークラスにオブジェクトを生成するための情報を渡す」というより
「ファクトリークラスにオブジェクトを生成するよう命令する」という感じですかね
「ファクトリークラスに、外部からパラメーターを与えてオブジェクトを生成させる」ことをしたいんですが、
そこでクラスの問題がいろいろと絡んできます・・・
>(回答者)さん
前方宣言も考えたのですが、クラスBがクラスAを作る時に、コンストラクタに引数を渡せないので
いろいろと不都合が生じてしまいました・・・


図で表すとこんな感じです
そもそもこのやり方は普通ではないやり方なのでしょうか?
画像

Re: C++ ゲーム設計とクラスの宣言について

Posted: 2011年8月29日(月) 12:29
by ookami
ファクトリークラスと敵クラスを両方参照するゲームクラスなどを作って、
そこから呼び出すというのはどうでしょうか?
順番はこんな感じで↓

敵クラス {
};

ファクトリークラス {
  敵作るメソッド();
};

ゲームクラスとかゲームメイン関数とか {
  ファクトリー.敵作るメソッド();
}

Re: C++ ゲーム設計とクラスの宣言について

Posted: 2011年8月29日(月) 23:08
by T
返信ありがとうございます

>ookamiさん

そのような方式のやり方を使うことにしました。
今のところ問題ないのでそれで作っていこうと思います。

とりあえず、当面の課題はスタックのポインタ渡しを行うなどで平和に作っていけそうです。

回答してくださったみなさんありがとうございました。