C/C++ゲーム製作総合スレッド Part5
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2014/01/16(木) 00:00:31.27ID:w6WW3hAo元スレ
DXライブラリ 総合スレッド その17
http://toro.2ch.net/test/read.cgi/gamedev/1383795645/
前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
C/C++ゲーム製作総合スレッド Part4
http://toro.2ch.net/test/read.cgi/gamedev/1376262450/
0674名前は開発中のものです。
2014/05/02(金) 00:13:50.98ID:5CvmG/6A2Dで同じようなことを考えてるのですが、描画管理クラスにリストを持たせ、
その管理クラスのメソッドを通してリストへ登録しようとしてます
XNAのSpriteBatchの形が近いです
しかしこの方法だと管理クラスを引数でどんどん渡していかなければいけなく、良い方法がないか探してます
2Dオブジェクトにstaticで管理クラス、または描画リストを持たせた方がいいのでしょうか
設計の話なので明確な答えがないのはわかってます
皆さんの考えを参考程度に聞きたいです
0675名前は開発中のものです。
2014/05/02(金) 00:48:59.22ID:DPIL44M1そこにパラメータ与えて、あとは自動的に描画されるような組み方してるん?
0676名前は開発中のものです。
2014/05/02(金) 01:19:41.25ID:ZlBT84m3>しかしこの方法だと管理クラスを引数でどんどん渡していかなければいけなく、良い方法がないか探してます
依存性があるなら明示する(例えばSetterやコンストラクタで注入するだとか)
というのはOO的には無難なお作法だと思うけど。なんか不都合あるの?
(いちいち記述するのがかったるい、だとか)
まぁ、あまりに広範に渡ってその依存性が確認されるなら、グローバルな
存在、グローバルなサービス、として提供してもいいのでは。尤も、描画
モジュールに依存するモジュールってゲームの中では限定的だと思うけどね
0677名前は開発中のものです。
2014/05/02(金) 01:31:13.85ID:Ru1dUuzyprivate IDrawable model;
private Vector2 pos;
private 表示するもの[] children;
public void Draw(描画管理クラス){
描画管理クラス.add(model,pos);
for child in child {
child.draw(管理クラス);
}
}
}
0678名前は開発中のものです。
2014/05/02(金) 06:36:13.80ID:Bq1H46te0679名前は開発中のものです。
2014/05/02(金) 07:18:20.71ID:DPIL44M1ある部屋から別のある部屋へ行く方法ってのは基本的に固定なので、最初に各パターンを計算しておけばいい。
上手く追いかけるように動かしたいってことなら、
有名なところで、パックマンの敵アルゴリズムの話がシンプルでわかりやすいと思う。
0680名前は開発中のものです。
2014/05/02(金) 07:57:10.51ID:gb8xd1Drみたいな表を作っておけば良いのか
0681名前は開発中のものです。
2014/05/02(金) 09:29:13.26ID:dzhB41LP2Dオブジェクトは座標、テクスチャを持ち、描画関数内で管理クラスのリストへ登録
という流れを考えてますので、自動的な描画はしません
>>676
やはりプログラムの最初にsetterで登録が一番無難ですよね
不都合はないのですが、2Dオブジェクト全てが
管理クラスのsetterを持つのが気持ち悪く思えてしまい・・・
描画モジュールに依存するものが限定的とは...ゲーム内では殆どのものが
描画されるものだと思ってましたが違うのでしょうか
オブジェクトを管理したりするものは別だと思いますが・・・
>>677
これは結局引数でどんどん渡していくのでは・・・?
0682名前は開発中のものです。
2014/05/02(金) 09:52:01.66ID:Ru1dUuzy引数で渡していっていいと思う
常に同じ描画管理クラス使うとは限らないし
0683名前は開発中のものです。
2014/05/02(金) 13:12:16.23ID:6RPuKXq0何故「気持ち悪い」のか言葉で説明できるようにしてみれば
どうすればいいのかわかるんじゃない?
0684名前は開発中のものです。
2014/05/02(金) 13:23:32.11ID:taHVwRQz登録するデータを戻り値にして呼び出し側で登録するとか
0685名前は開発中のものです。
2014/05/02(金) 19:21:58.74ID:dzhB41LPレンダーターゲットを変えた時などでしょうか
>>683
2Dオブジェクトは例えばスコアや、メニューなどに使用するのに
管理クラスのsetterを常に持ち続けてるから・・・?
>>684
list.add(pObj->draw()); という感じですか?
この場合複数のオブジェクトを描画する時はどうなるんでしょう
スコアクラスは1桁描画を複数回呼ぶと思います
そういう時は戻り値でデータを返せないのでは
結局引数で渡してリストへ登録
または2DObject自身がリストを保持し、そこへ各派生クラスが登録する
という形になってしまうのでしょうか
0686名前は開発中のものです。
2014/05/02(金) 20:24:35.53ID:tEs8rCVtプレイヤーの状態とかエフェクトとかシングルトンで管理していて今まではどこかのクラスから
Game::instance()->registerEffect(new Effect())
みたいにできたんだけどプレイヤーごとにGameを作るようにしたらこれができなくなって
ゲームのインスタンスをあちこちに渡さなきゃならなくなったんだけどこんなことしないでもできる方法ない?
0687名前は開発中のものです。
2014/05/02(金) 20:30:31.53ID:DPIL44M1renderer.add(PlayerObject); //プレイヤーキャラクターのオブジェクトを登録
renderer.add(EnemyObject); //敵キャラクターのオブジェクトを登録
…みたいなのとは全く別の話?
0688名前は開発中のものです。
2014/05/02(金) 20:32:36.22ID:DPIL44M1Gameクラスってなんじゃらほい?
いわゆるシーンとかシーケンスってやつ?
0689名前は開発中のものです。
2014/05/02(金) 20:37:30.44ID:Yjnja2zXシングルトンが用を足さない状態だからやめるのが手っ取り早いけど
とりあえずシングルトンインスタンスの取得にID等の引数もたせれば?
引数違いなら違うオブジェクトを返すてのは実装は容易でしょ
こういうどこでも使えるグローバル変数的な状況で使うシングルトンは嫌いだけどな
0690名前は開発中のものです。
2014/05/02(金) 20:42:33.50ID:Ru1dUuzyレンダリングターゲットを変えたときもあるかもしれないけど、
マルチスレッドで分割してトラバースするこもとあるし。
Direct3D11でコンテキストを複数作れるようになったしね
0691名前は開発中のものです。
2014/05/02(金) 20:45:40.07ID:Gu2dz6L1戻り値をVectorかなんかにしたら
>>686
instance()に引数渡して特定のインスタンス取得出来るようにする
これまでシングルトンだったのが複数必要になった時点で設計見直した方がいいような気もするけど
0692名前は開発中のものです。
2014/05/02(金) 20:54:53.01ID:tEs8rCVtEffectは別で管理している
シングルトンをやめるからどうするのが良いのかと思って聞いたんだ
ダブルディスパッチで敵の当たった処理とかしているんだけど
class Game {
Enemy enemy[];
}
class Enemy {
void hit() {
if( 死んだ ) { Effect::addEffect(new Effect()); }
}
}
みたいにしててどのエフェクトを使うかはEnemy側で決めるようにしたいからこうなったんだけど
GameにEffectのインスタンス持たせてEnemyにそのインスタンスの参照なりなんなり渡して
if( 死んだ ) { effect->addEffect(new Effect()); }
とかしても良いんだけどなんかしっくりこないんで気になったのよ
>>688
そうなんだけど実際あんまり関係なかった・・・
>>689
うまい設計思いつかなかったんよね
その方法手っ取り早いし良さそうです
0693名前は開発中のものです。
2014/05/02(金) 21:46:30.08ID:Yjnja2zXEnemyはどうしたってEffectへのポインタが欲しいわけで描画の関係からか複数存在してるとなると
初期化などでずっと持たせるのが嫌ならhitかそれ以上に位置するGameから呼ぶ関数に引数として渡すか
EnemyはGameクラスのポインタ位持ってるならGameのほうにAddEffect関数もたせてEnemyはそれを呼ぶか
スレッドセーフでない設計ならEffectポインタのグローバルか静的関数なGetterとSetter用意して
GameオブジェクトごとにEnemy更新前にSetterでGetterの戻り値となるポインタを入れ替え…止めた方がいいな
0694名前は開発中のものです。
2014/05/02(金) 22:17:39.20ID:DPIL44M1Enemy内から呼んでるんだよね?
0695名前は開発中のものです。
2014/05/02(金) 22:41:54.83ID:gb8xd1Drエフェクト番号とフラグを持たせれば良いんじゃない
0696名前は開発中のものです。
2014/05/03(土) 02:03:51.33ID:aTctHTqNそんな感じです
ですがそのrendererを渡そうか悩んでます
引数ですとかなり深い(?)ところまで渡す必要があるのではないかという感じです
>>690
引数で渡した方が自由が利きますね
めんどくささと柔軟性のどっちをとるかみたいな感じでしょうか
>>691
座標、テクスチャ、UV、色などのことを考えるとVectorかなんかだときつそうです
とりあえず引数で渡す方向で作ってみたいと思います
オブジェクト指向難しいです...
■ このスレッドは過去ログ倉庫に格納されています