ゲームにおけるデータ構造・クラス設計・パターン
レス数が1000を超えています。これ以上書き込みはできません。
0001名前は開発中のものです。
2006/08/10(木) 20:27:06ID:BnvyxuCBどのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
0948名前は開発中のものです。
2008/04/15(火) 17:13:48ID:805Lw7LR>しかし一回のフレームを描画するのに全く異なる性質のものを複数回描画させられる
>時代になった昨今
昨今?
見た目(形状、材質)が異なる複数種のインスタンスを効率よく描画するとか
そういう要請は10年以上前からほとんど変わってないよ
ところで俺の作文を見てくれ
GPUのモンスターパワーに物を言わせ、パフォーマンスアナライザの類を一切用いずに
呑気なコードを組んでもグリグリ動くちょい派手エフェクトの3Dアクションゲーがリリースできる
時代になった昨今
どう思う?
0949名前は開発中のものです。
2008/04/15(火) 17:29:08ID:Pz8UivItって俺なのか?w
0950名前は開発中のものです。
2008/04/15(火) 17:45:14ID:805Lw7LR× >>947
○ >>945
>ここでもしもシーンの各最小単位が各々判断してバッファへの描き出しをやっていると
あれ、中間描画ナンチャラの話はどこへ行ったんだ
「各最小単位」がシーングラフの階層構造内の各ノードのことで
そのノードのdrawメソッドが「バッファへの描き出し」をやるのか?
それ中間描画ナンチャラも何もなく、drawメソッド内で
直接DrawPrimitiveとか呼び出してね?
0951名前は開発中のものです。
2008/04/16(水) 07:55:31ID:gjjFZ6S4シーングラフを使ったことの無い俺が頓珍漢なことを言うけど、
一概にシーングラフって言っても、グラフ構造以外の
動作の実装って、各エンジンによってバラバラなんじゃないの?
その辺をどういう風に実装してるのかを>>944が情報開示しなきゃ、
具体的なアドバイスって出来ないんじゃないの?
ググってみたけどこれに近いの?各個が描画処理を持ってる。
http://www.quatouch.com/products/hisui/doc/scenegraph.html
こんな風に直に描画メソッドを呼び出しているから、
描画の主体がシーンの最小単位って言ってるの?
であれば「各ノードの描画要求」を仲介する管理者を立てればいいよね。
これは末端まで伝播されるコンテキストをその管理者とすると都合が良さそう。
管理者にエフェクト描画フラグとノード描画(node)メソッドを作って、その内部実装は、
if (
(!nodeはエフェクト) ||
(nodeはエフェクト && エフェクト描画フラグ)
){
node.draw(this);
}
これで良いんじゃないのかな。
ただ、各ノードが描画メソッドを持ってしまっているとすると、
ゲームの実行状態と関係してくる複数の描画処理を、
一つのノードに内包させてしまっているのかなという気がするので、
その場合は、描画処理を一つずつノードへ分解しなければいけないと思うよ。
0952名前は開発中のものです。
2008/04/16(水) 08:14:41ID:gjjFZ6S4「エフェクトをばっさり無効にしたい」ってとこだけ意識してしまって、
それが要求だと勘違いしてしまった。
半透明系のエフェクトの描画処理を無効化したいものだと思って
書いてしまったので、変なところは読み飛ばして欲しい。
ほんとの要求は、「描画先バッファを上層で制御したい」ってことだよね。
まあこれも多分、先に書いた管理者のノード描画部分で制御出来るんじゃないのかな。
0953名前は開発中のものです。
2008/04/16(水) 21:55:02ID:oFemimm/>ググってみたけどこれに近いの?各個が描画処理を持ってる。
そんなかんじです。drawをもってるcompositeパターン
>>952
>ほんとの要求は、「描画先バッファを上層で制御したい」ってことだよね
制御できるかできないかという意味では
シーングラフがdrawを実装した今のままでも十分制御できます。
リファクタリングの動機は不可能を可能にとか、そういうところにはないと思います。
0954名前は開発中のものです。
2008/04/16(水) 23:08:47ID:R79eU4CuVisitor風の実装に変えてみたら?
シーングラフはモデルとマテリアル情報だけ持って、
Visitorがシーングラフをトラバースして必要があれば描画する
ポストエフェクトを切りたければ、ポストエフェクトのVisitorを無視すればいい、的な。
でも、どんなに描画とデータを分離したところで、実際にゲームを作ることになれば
ノード単位でのエフェクト制御(シャドウを落とすかどうか、とか)がどうしても必要になってきて、
末端に細かいフラグが蓄積してしまってあまり意味がないんだよね。
結局、描画エンジンに限っていえば、データと処理の分離は、
最大公約数的な情報を末端のノードに持たせることになって、逆に効率を落としちゃうし、
タイムクリティカルなゲームの最適化を阻害するのが実情。
先進的なエンジンほど、制約がきつい(拡張性が無い、固定機能ばかり)のが現実だから、
何かいい構造を思いついたら発表すれば、一儲けできるかもよ?
0955名前は開発中のものです。
2008/04/16(水) 23:24:47ID:6tcgJhqC君のシーングラフというのは
ノード(特にdrawインタフェース付きのやつ)同士の接続は何を表しているの
まぁ典型的なものなら座標系(例えば姿勢行列)の親子関係になるわけなんだけど
この場合、巡回目的は行列スタックを積み上げてながら仮想空間上の各ノードの
ワールド座標を得ることだったりするわけだが、その処理の中でdrawを呼び出すの?
0956名前は開発中のものです。
2008/04/17(木) 03:10:24ID:3m8+g+3b大枠のコンセプトとしてはVisitorということになるのかもしれません。
ただ、VisitorそのものはC++ではその真価を発揮できない、
Compositionツリーの方に新しい要素が頻繁に追加されることが予想される
等、その弱点がちょうど今回のケースにあてはまり、そのままでは適用しずらそうです。
さらに個人的な感想をかけば、型と場合に応じて関数がいくつもできあがるのは好みません。
それこそ中間描画パケットのようなローテクなアプローチが必要なのかもしれないです。
0957名前は開発中のものです。
2008/04/17(木) 07:36:26ID:FHbVDin2> ただ、VisitorそのものはC++ではその真価を発揮できない、
コードを書いてみてくれ。なんか勘違いしてるような気がするんで。
0958名前は開発中のものです。
2008/04/17(木) 10:20:54ID:CViJCy2oゲームに使う分には、ノードに種類フラグを持たせて、適切にアップキャストするのが常套手段だね。
Visitorは対応している種類のノードだけ処理する。
Visitorの関数の数の爆発にも、ノードの種類の増加にも簡単に対応できる。
ダブルディスパッチが目的ではないから、Visitorとはコンセプトが少し違うな。
イテレータに近いかも。
0959名前は開発中のものです。
2008/04/22(火) 22:42:37ID:Z5McnRHOつNVSG
Traverserあたりを調べればそういう基本的な悩みは解決すると思う。
0960名前は開発中のものです。
2008/04/23(水) 18:23:23ID:BqXPf/Oaとても参考になりました。
シーングラフはあくまでデータの一群であって
それぞれの目的をその名に冠したtraversalがそれを利用してそれぞれの目的を果たすと。
レンダリングもtraversalの一種に過ぎないと。そんな解釈みたいですね。
ただコレ、NodeHintsなるものとか、ShadowMappingがなぜか埋め込まれてるとか
ちょっと気味が悪い部分もありますね。
0961名前は開発中のものです。
2008/04/23(水) 19:09:53ID:U3C9KQJ3具体的に言ってごらん
0962名前は開発中のものです。
2008/04/23(水) 20:47:19ID:M28cm74p>>954 に
> ノード単位でのエフェクト制御(シャドウを落とすかどうか、とか)がどうしても必要になってきて、
> 末端に細かいフラグが蓄積してしまってあまり意味がないんだよね。
ってちゃんと書いてあるじゃねえか
NVSGはその典型例だよ
0963名前は開発中のものです。
2008/04/25(金) 00:41:21ID:vc7Q6jEY属性を処理すればいいだけ。C#のAttributeなんかが同じ要求から出てきたものじゃないかと思う。
プロパティグリッドの情報はオブジェクトにとって本質的じゃないけど、オブジェクト側に埋め込んでおきたい
みたいな。
0964名前は開発中のものです。
2008/04/25(金) 00:47:43ID:zJzd1rCbオブジェクトには付けられない
0965名前は開発中のものです。
2008/04/25(金) 01:13:35ID:vc7Q6jEYじゃまぁ、s/オブジェクト/クラス・メンバ/ということで。
0966名前は開発中のものです。
2008/05/05(月) 14:08:00ID:+Zvy5eoD0967名前は開発中のものです。
2008/05/11(日) 16:38:51ID:5xrxRK37ゲームを作ろうと思い、デザインパターンの勉強をしてるんですが
Singletonをどんな風に使うのか今一ピントきません。
Singletonじゃないと困る場合。
Singletonだと助かる場合。
出来たら例を示して貰えないでしょうか。
0968名前は開発中のものです。
2008/05/11(日) 16:57:46ID:XzXZ0r0X0969名前は開発中のものです。
2008/05/11(日) 17:02:04ID:tAMxfx7F0970名前は開発中のものです。
2008/05/11(日) 17:24:11ID:3Mda4QHxいい気になってる自称天才が一番伸びねえよ。
0971名前は開発中のものです。
2008/05/11(日) 17:28:01ID:iOBnIUaU少なくとも「糞だって他の人が言っていたから」
という理由だけで、一度も使ったことのないモノを非難する人よりはマシ。
0972名前は開発中のものです。
2008/05/11(日) 17:42:18ID:J2J0EAvR0973名前は開発中のものです。
2008/05/11(日) 17:52:03ID:GgT2def3・基本的な仕組みが判ってれば問題無い。
・ゲームを作っていけば、自ずと使う場面がわかるはず。
・判らないようじゃ、ゲーム制作に向いてない。
・むしろ技法を知らなくても何時の間にかそれっぽく書けるのが理想。
・使う言語が決まってるなら、そのスレを当たるのお勧め。
0974名前は開発中のものです。
2008/05/11(日) 18:00:20ID:esEBS9+0「クラスのインスタンスがひとつだけであることを保障する」というシングルトンの目的が
必要になる場面なんてほとんどないから、ピンとくるわけがない。
グローバル変数大好きなやつが免罪符みたいに使ってることのほうが多いから、
強いて言えば「グローバル変数が使いたいとき助かる」と言えるかもしれない。
0975名前は開発中のものです。
2008/05/11(日) 18:16:18ID:PCcZcAXj画像を先読みしておいて使いまわしたい時には、
シングルトンで先読みして、
必要な時にクラス作って呼び出すってやってるんだけど、
これってもしかして、間違えてる?
0976名前は開発中のものです。
2008/05/11(日) 18:30:24ID:esEBS9+0それのどこでシングルトンが必要なのかわからない。
0977名前は開発中のものです。
2008/05/11(日) 18:36:53ID:tOAeonzFはじめから知ってろってことか
0978名前は開発中のものです。
2008/05/11(日) 18:40:49ID:GgT2def3ハナからある言語ならシングルトンなんてスパゲティ抑止策としか思えない。
そういう言語だとシングルトンは必要と言えば必要だし、いらなきゃいらない。
と言うわけでお前等落ち着け。
0979名前は開発中のものです。
2008/05/11(日) 18:41:31ID:PCcZcAXjつーことは。間違えてるのか。
描画クラスをダレに持たせるかが分からなくて、
ダレにも持たせないのを選択したのが、悪いのかな?
0980名前は開発中のものです。
2008/05/11(日) 18:42:43ID:PCcZcAXj0981名前は開発中のものです。
2008/05/11(日) 18:53:03ID:5xrxRK37それで済むなら、シングルトンは必要ないですよね。
一つしか存在しないのを分からせる為の目印と言うには分かりにくいですし…
となると、シングルトンが作られた目的というか、用途があるはずですが
例えば、データを受け取って、それをファイルへセーブするクラスはどうでしょうか。
キャラ毎に進行状況やフラグをセーブするような場合や
キャラリストファイルから特定のキャラを選び、探索チームを作成し
そのチームのキャラデータのみをキャラリストファイルへ反映させる場合です。
wile(チームの終わりまで) {
Team[ chara_pos ].save()
}
(そんなごちゃごちゃしたセーブのやり方をするなと言うツッコミはなしで)
0982名前は開発中のものです。
2008/05/11(日) 18:57:03ID:6C+qLPF1描画クラスは一つ一つのキャラクターが持つはず。
画像は同じでもアニメのパターンが違ってたりするので。
>>976
STGのザコ敵で、同じ画像を使っていて、何百匹も出る場合です。
0983名前は開発中のものです。
2008/05/11(日) 19:03:55ID:GgT2def3クラスに画像が固定ならシングルトンでも良いけど、
可変なら微妙じゃね?
(シングルトンで可変な数の画像読むなら別だろうけど、
それはそれでアクセス方法がシングルトン的じゃなくなりそうw)
つか、必要か不要か二元論な奴は、
議論する暇あったらミニゲームでも作って、
いろいろ試したらどうよ…
0984名前は開発中のものです。
2008/05/11(日) 19:38:15ID:tAMxfx7F背伸びしすぎw
0985名前は開発中のものです。
2008/05/11(日) 19:38:35ID:Y1IG+/zm・シングルトンを知っていれば分かる
・知らずに2個インスタンスを作ろうとしても作れない
これ以上に分かりやすい目印はないと思うが。
0986名前は開発中のものです。
2008/05/11(日) 20:27:08ID:5xrxRK37現状だというのは分かっています。
マーク単体の意味は分かっても、それを利用する為の判断基準のようなものが
自分の中にまだ備わっていないので、先達の方に例を示して貰えないかと来てみたわけです。
0987名前は開発中のものです。
2008/05/11(日) 20:50:58ID:GgT2def3「自転車のハンドルを右にきる理由は理解してるのですが、タイミングは何時ですか?」
と聞かれたら「転んで憶えろ」と言うしかないだろ?
0988名前は開発中のものです。
2008/05/11(日) 20:51:58ID:3RvB3bNr「このクラスはシングルトンです。」
とか真顔で言える気がしない。
唯一のインスタンスを保障するだけの癖に
大層な名前がついてるなって思う。
0989名前は開発中のものです。
2008/05/11(日) 20:52:35ID:iRDlbSEvみんな話題待ちすぎwww突然レスがつきすぎだぜ
0990名前は開発中のものです。
2008/05/11(日) 21:04:49ID:9L6x2D0Aハンドルとか設定とかを持たせるときとか
0991名前は開発中のものです。
2008/05/11(日) 21:05:29ID:MO+nJU1n他のパターンと違って誤解される可能性が低いのと他よりは知名度高いからよく使ってる
でも、デザパタって意外と知ってる人少ないよね
普通に会話に使うもんだと思ってGoF勉強したけどほとんど通じない
0992名前は開発中のものです。
2008/05/11(日) 21:07:20ID:iRDlbSEvインスタンスがなければ生成してから返し、ある場合は既にあるインスタンスを返す関数が在るってことであってる?
個人製作なら自分ルールで最初にその手のインスタンスは初期化する、って決めておけばいらなそう。
複数人で開発する場合で、その手のインスタンスを前もって初期化したくない場合は効果がでるかもわからん
0993名前は開発中のものです。
2008/05/11(日) 21:07:32ID:5xrxRK37不幸なことに、シングルトンが必要と思われるケースのプログラムを
今までに組んだことがありません。
極端な言い方をすれば、この先シングルトンを使う場面に遭遇しなければ
シングルトンが何なのかさえ分かりません。
知っていて使わないのと、知らないで使えないのでは大きく意味が違うと思います。
0994名前は開発中のものです。
2008/05/11(日) 21:29:15ID:2XRRQTqQここはGoFすらろくに知らないで設計語ってるスレだから
0995名前は開発中のものです。
2008/05/11(日) 21:32:50ID:FPktO55dスコープはコンテナが管理するというのが今の流れだよね
シングルトンであるとかプロトタイプであるとかで構成は変えないしね
ゲームなら面とかでスコープかえると初期化が楽になるかもしれないけど
メリットはあまりないかと
オンラインゲームなら必須の知識ではあるけど
0996名前は開発中のものです。
2008/05/11(日) 21:45:37ID:GgT2def3だったら使うなよ。くだらん豆知識さっさと忘れてゲーム作れ。
気がつけば「あ、これシングルトンだったね」と気がつく日もあるだろう。
0997名前は開発中のものです。
2008/05/11(日) 21:55:34ID:5xrxRK37失礼ですが、他の人が言ったことを繰り返して言っているだけの言動からは
貴方がデザインパターンを理解しているとは到底思えません。
0998名前は開発中のものです。
2008/05/11(日) 22:13:28ID:GgT2def30999名前は開発中のものです。
2008/05/11(日) 22:24:00ID:5xrxRK37スレタイを確認した方が良いんじゃないですか?
1000名前は開発中のものです。
2008/05/11(日) 22:24:58ID:5xrxRK37ありがとうございました。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。