トップページgamedev
585コメント234KB

ゲームにおけるデータ構造・クラス設計・パターン2

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/05/23(金) 21:10:59ID:8M1gqhPX
具体的なゲーム名を挙げて、
どのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。

関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。

前スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1155209226/

テンプレ追加事項あったらよろすく
0308名前は開発中のものです。2008/08/03(日) 23:21:42ID:HN+lqKwd
FFとかのムービーシーンの管理はどうやればよかですたい?
0309名前は開発中のものです。2008/08/03(日) 23:31:02ID:+gPnPllx
プロダクションだとファイルサーバ置いてモデル素材とか徹底管理するみたいだね。
Digital Anime Artwork(1/2)って本が内情ノウハウ溢れてて参考になった。
ほんとフォルダ分けの徹底とワークフロー統一にどこも頭悩ませてるようだ。

いまどきだとプロジェクションマップとか多用する規模の物も多いしな、美術、撮影、合成と
0310名前は開発中のものです。2008/08/03(日) 23:31:41ID:+gPnPllx
あれ? ここCG板じゃねえじゃん。
うわ俺凄く恥ずかしいマジレス?
0311名前は開発中のものです。2008/08/03(日) 23:31:45ID:0ZCECk8O
>>308
ムービーシーンなんて作ったことないからわからんですたい。
脳内妄想では、ムービーを再生できるオブジェクトが登録されてるシーンに移行するだけですたい。
0312名前は開発中のものです。2008/08/04(月) 17:38:42ID:OcXTlg2n
うさんくさか博多弁多かたいね。なんかぐらぐらこく

馬鹿にしないでください><
0313名前は開発中のものです。2008/08/04(月) 23:28:56ID:Vp8LYTR0
>>312
こらあげにまっことすまんかったぜよ。
03143022008/08/04(月) 23:40:39ID:OTznAvMd
>>306
そうそうそんな感じ。

1シーンの処理は画像やその他のデータの読み込み、メインループ、
次のシーンに移る前の要らないデータの破棄のような感じにするつもり。
前のシーンに戻れるように階層構造を使ったりしたら難しくなりそう。
0315名前は開発中のものです。2008/08/07(木) 02:18:10ID:iFGNdN4x

  しーん…
0316名前は開発中のものです。2008/08/07(木) 15:44:15ID:J5sJkFaL
【 審議中 】
  ∴∵
0317名前は開発中のものです。2008/08/24(日) 00:35:34ID:kCbI2Ziv
(審議が長引いています。今しばらくお待ちください)
0318名前は開発中のものです。2008/08/27(水) 21:03:35ID:pp3RgERm
キャラクターの状態って、どうやって実装してますか?
例えばマリオなら、
enum { SMALL, BIG, FIRE };
enum { STAR, NOT_STAR };
のように、直交した状態ごとにenumで列挙して、ifで場合わけするのでしょうか?
stateパターンでは無理???
0319名前は開発中のものです。2008/08/27(水) 21:31:52ID:tgwWcjRq
それだけだとモーション中とかが実装できないよね
FCマリオならそのenumに加えて、ゲームステータスとして「巨大化アニメ進捗」を示すカウンタ用意すれば十分だと思う

ステータス変化中に他の画面止めていいのか、それとも無敵時間とか起きながら遷移中にも時間は動かすのか前提がもうちょい欲しいかも。
その辺の細部を徹底的に見つめていくと、
適するパターンがあるのか、それとも独自な設計選ぶべきかが見えてくるんじゃないかな。

マリオにしてもSFCのヨッシーとかFC版3での画面奥行き潜りとか、色々
実装したい事を見据えて行くと変数の数やステータスのまとめ方が見えて来るだろうしね。
03203182008/08/28(木) 00:48:01ID:Z+eKsEJG
>>319
いろいろ考えないといけない事多いですね。
この手のものを実装する方法として、stateパターンとenumとifで場合わけの他に何かあるんでしょうか?
状態の種類と数が複雑になってくると、enumとifを使う方法しかない気がしてきます。
ifで場合分けって、コードが汚く感じてあまり好きじゃないんですよね。
でも、こういうケースでは、これがベストなのかなぁ。
0321名前は開発中のものです。2008/08/28(木) 01:16:45ID:q3w3U78u
>コードが汚く感じてあまり好きじゃないんですよね。
好みと言うより仕方がない気も。
よくわからんなら下手に「なんとかパターン使うべきなのかな!」って
考えるより、ベタで汚いながらも「いじりやすい」単純なコードからはじめてさ、
あとはめくらめっぽう試した方がいいよ。

ifでの場合分けさえ、インライン展開される事を知ってるかどうかで汚くても使う訳で。
で、知ってる人にはそういうのやら三項演算多用した分岐の方を「美しい」って言っちゃったりするからねw
0322名前は開発中のものです。2008/08/28(木) 01:34:35ID:O/+Qqs/2
最初ってそういうの考えちゃうよな
世間じゃどういうのが正しいんだろうとか考えて自分のコードが全然すすまねぇ
今ではなんだかんだで破綻するギリギリまで「動けばいいや」の精神で書いてる
仕事じゃないからこそだな
0323名前は開発中のものです。2008/08/28(木) 03:20:26ID:tq3ymPlL
関数ポインタで飛ばせば見た目は良くなるね。
可視性に問題が出てきそうで自分では使ってないけど。
0324名前は開発中のものです。2008/08/28(木) 09:12:41ID:y2qhH8VC
そこで goto ですよ
0325名前は開発中のものです。2008/08/28(木) 10:11:26ID:MS2hHN8x
某シューティングツクール的にはそもそも「状態」という概念が無くて、
全く別のオブジェクトを「発射」して、自分を「消滅」させることで状態の変化を表現してた。
0326名前は開発中のものです。2008/08/28(木) 11:46:09ID:Qlb2/Pnm
javaは関数ポインタ使えないんだ・・・・
0327名前は開発中のものです。2008/08/28(木) 11:57:21ID:MS2hHN8x
>>326
Javaの場合は、状態クラスを作って、それを持つようにすればいいんだよ。
03283182008/08/28(木) 17:59:10ID:Z+eKsEJG
>>321,322
汚いコードって書き直したくなってくるんですよね。
綺麗に書けないと達成感がないというか・・・。
また、本などで知識をつける毎に、今まで書いてきたコードが正しくない書き方だったな〜と思うことが多くて(プログラミング始めた頃はダライアス継承とかやってたw)。
完成させることが第一と思っていてもついつい・・。

>>323,327
stateパターンですよね?

>>325
そういう方法でやってるところもあるんですね。
でも、オブジェクトのコピーが効率悪そう。
0329名前は開発中のものです。2008/08/28(木) 18:35:54ID:CuTVRbF+
自分ひとりで考えても、本を読んでも出てこない、他人の眼に触れさせなければ見えてこないものもある。
それよりも自分の達成感の方を優先したいならそっちを選べば良いさね。


つか、コードの正しさ、綺麗さ、効率の良さ、読みやすさってどういうものだとして使ってる?
0330名前は開発中のものです。2008/08/28(木) 19:03:37ID:Jt4Hw7jN
むしろ可能な全ての表記法を試す勢いで!
次のプログラムからは気に入った表記で。
昔の事は忘れましょう。
0331名前は開発中のものです。2008/08/28(木) 19:43:21ID:MS2hHN8x
人が書いたソースを読むのって勉強になるけど、読む気が出ない……

>>328
>stateパターンですよね?
パターンのことはよく知りませんが、ポリモーフィズム(多態性)です。
0332名前は開発中のものです。2008/08/28(木) 20:37:26ID:xedxyhWb
>状態という概念が無い

敵が爆発する瞬間とかだとやっちゃうなあ……。効率悪いんだろうか。
0333名前は開発中のものです。2008/08/28(木) 21:28:28ID:MS2hHN8x
>>332
他に良い方法があるならどうぞ。
MHz世代のCPUで通用してた方法だから、致命的な効率低下があるとは思わないよ。
03343182008/08/28(木) 21:30:31ID:Z+eKsEJG
>>329
コードの正しさ、綺麗さの2つは曖昧な表現で使うべきではなかったですね。
私はコードには、実行効率、保守性、読みやすさの3つがあると思っています。
今問題にしてるのは、主にこのうち後者2つです。
ただ、読みやすさは人それぞれなのかもしれません。

>>331
状態毎に仮想関数をオーバーライドするのが、まさにstateパターンですね。
0335名前は開発中のものです。2008/08/28(木) 21:59:24ID:O/+Qqs/2
保守性も読みやすさもifとenumにしたからと言って損なわれるものでも無いと思うけど何を悩んでるの?
0336名前は開発中のものです。2008/08/28(木) 22:18:17ID:qtCAmqfQ
ダライアス継承ってどんな継承?
0337名前は開発中のものです。2008/08/28(木) 22:22:03ID:xedxyhWb
>333
爆発オブジェクトを自身と同じ場所に生成して、自身を削除する
って認識で合ってる?
03383182008/08/28(木) 23:04:17ID:Z+eKsEJG
>>335
保守性については、仕様変更により、状態を追加したり、廃止したりする時、影響する部分を探し出すのがめんどくさいというかすっきりしないというか。
読みやすさは個人的な好みかもしれません。
保守性、読みやすさともにstateパターンの方が好きです。
でも、直交した状態群が複数あるとき、stateパターンで実装するのが難しそうなので悩んでいました。
うまい方法が見つからなければ、enumとifでいくつもりでした。

>>336
ダイアモンド継承の方が一般的な呼び方なのかもしれません。
仮想継承を使うことによって、継承グラフが菱形になるやつです。
0339名前は開発中のものです。2008/08/29(金) 00:44:03ID:hcEje8O4
ダライアス継承なんて初めて聞いたなあ

英語だと Multiple Inheritance あるいは Diamond Inheritance と言うようだが。
あとダライアス(Darius?)はペルシャ人の名前のようだ。
まゆに唾つけて聞いておこうかな
0340名前は開発中のものです。2008/08/29(金) 00:50:36ID:rESH+j3C
ダライアス継承でググってみても勘違いで質問してる奴にしか引っかからないな
デザパタへの無駄なこだわりとか、初心者がなんか変な用語がいっぱい並んでる本だけ読んで惑わされてるだけに見える
0341名前は開発中のものです。2008/08/29(金) 02:39:33ID:VLtb7ZED
Multiple Inheritance (多重継承) と Diamond Inheritance (ダイヤモンド継承) は
違う概念だが...というかダライアスっていうとシューティングゲームしか思い浮かびませーん
0342名前は開発中のものです。2008/08/29(金) 06:43:42ID:gdp2Jatd
http://ir9.jp/prog/ayu/datlog/tech_cpp/1106527792/1106527792_01.html#R50
0343名前は開発中のものです。2008/08/29(金) 10:26:08ID:ESvglHwU
>>337
合ってると思うよ。
問題があるとすれば、状態を変化させるだけの場合、ライフとかのパラメータ引き継ぎどうすんねんとか。
そこんとこがツクールVじゃ無理だった。(最近の(95とか)はシラネ)
0344名前は開発中のものです。2008/08/29(金) 14:31:33ID:UaA8GGvx
>>341
>ダライアスっていうとシューティングゲームしか思い浮かびませーん
ダライアスの面セレクト画面が菱形継承図っぽいところから生まれた俗称だったりしてw
0345名前は開発中のものです。2008/08/29(金) 14:34:13ID:nV9hYRuE
>だったりしてw
いやだったりしてっつーかそれしかなくね
0346名前は開発中のものです。2008/08/30(土) 13:56:18ID:vqGqt03L
ダイヤモンドが2個も3個もあるような継承のことか。
C3 MRO の解説でしか見たこと無いが。
0347名前は開発中のものです。2008/08/30(土) 14:18:00ID:gGJd0yLw
ドラえもん 「ことわざゲーム」
これはいいアニメ。 ... ドラえもん 藤子F不二雄 アニメ
ドラえもん後期 ドラえもん本編 教育アニメ コメント非
表示推奨 緑 ...
http://ex-co-jp.8866.org/gourmet/080803.rar
0348名前は開発中のものです。2008/08/30(土) 14:23:18ID:h7pQaJrI
なんかあちこちで見かけるな。これ以上ないってくらい、明らかにヤバいリンク
0349名前は開発中のものです。2008/08/30(土) 14:32:04ID:hoYQeFVI
夏休みも終わりって事さw
0350名前は開発中のものです。2008/08/30(土) 14:40:33ID:vqGqt03L
Bot使った宣伝書き込みかなぁ
0351名前は開発中のものです。2008/08/30(土) 15:36:27ID:h7pQaJrI
なんかのマルウェアって聞いたが
0352名前は開発中のものです。2008/08/31(日) 15:40:22ID:5jP5dBFC
A has B B has C C has Dのようなクラス構成で
Aで作ったEをDで使うために、Aから呼び出したB、Bから呼んだC、Cから呼んだDのそれぞれの関数の引数に
Eを渡していくのはいいのかな?
0353名前は開発中のものです。2008/08/31(日) 15:45:26ID:eaWcmeF0
いいんじゃね。
0354名前は開発中のものです。2008/08/31(日) 15:47:56ID:fQJxWw7j
別に悪くはないと思うよ
Eの役割によってはABCD全てからアクセスできる領域に置くのもアリかもね
なんにせよその構成だけじゃいいとも悪いとも言えない
0355名前は開発中のものです。2008/08/31(日) 15:54:48ID:5jP5dBFC
>>353
>>354
サンクス
AからDは直接呼べないけど、Eを使うのはDなので、
AからDにEを渡したいけど、それだけのために間にクラスでEをたらし回しにするのがどうかな〜と
思ったんだよね
0356名前は開発中のものです。2008/09/02(火) 03:29:08ID:m23QvXa7
このスレにUMLで図描いて貼っても、きっと誰かが見る前に流れて消えてしまう罠
0357名前は開発中のものです。2008/09/02(火) 03:31:07ID:m23QvXa7
>>352 >>355
コンポジッションの視点、あるいはチェインズ・オブ・レスポンシビリティの視点で言えば、
それは普通にアリ。 っていうか、>>354 も言ってるけど、その構成だけだと(意図する形の意味づけが見えないと)
本当はいいとも悪いとも言えないが。
0358名前は開発中のものです。2008/09/02(火) 17:16:20ID:BpB/a+5N
CarクラスはTireクラスを4つ持っているとして、
TireクラスもCarクラスを持っていてCarクラスの関数を使えるという設計はいいんでしょうか?
0359名前は開発中のものです。2008/09/02(火) 17:22:14ID:Kf1ObPTz
コールバックしたいならインターフェース化してポインタ渡すとよい
TireクラスでCarクラスを生成するとかなら論外
0360名前は開発中のものです。2008/09/02(火) 17:30:36ID:BpB/a+5N
TireクラスにCarクラスのポインタを持たせて、Tire生成時とかにCarクラスのオブジェクトのポインタを渡せば
いいということでしょうか?
0361名前は開発中のものです。2008/09/02(火) 17:36:03ID:NydWLubY
>>360
Tireが常にCarのポインタを持っている必要もなくて、
CarがTireのメソッド呼び出し時に必要なポインタを渡すのもアリだと思う。
0362名前は開発中のものです。2008/09/02(火) 17:40:44ID:IXiySr/S
タイヤが車に関心があるってどういう状況?
0363名前は開発中のものです。2008/09/02(火) 17:42:28ID:NydWLubY
「パンクしたよ」って知らせてくれるんじゃね?
0364名前は開発中のものです。2008/09/02(火) 17:44:29ID:IXiySr/S
なるほど
0365名前は開発中のものです。2008/09/02(火) 19:17:31ID:gmtfIbjx
それ車が「パンクしたか?」メソッド持ってるんじゃダメなの?
0366名前は開発中のものです。2008/09/02(火) 19:20:27ID:IXiySr/S
車が、常に「パンクしたか?」ってタイヤに聞くの?
0367名前は開発中のものです。2008/09/02(火) 19:24:40ID:gmtfIbjx
うん
パンクに限らずあらゆる故障具合をウェルネスシステムが監視しててそいつに聞けば全部OKみたいな
車のメソッドじゃなくなったけど
0368名前は開発中のものです。2008/09/02(火) 19:38:46ID:IXiySr/S
メディエーターみたいなの?
0369名前は開発中のものです。2008/09/02(火) 20:44:39ID:F4HrtZLF
>>366
実際のTPMS(タイヤ空気圧監視システム)はそういうものだよ。
ホイールに取り付けられたセンサーモジュールが車両本体側装置と一定時間毎に無線交信してる
具体的には、本体が一定時間毎に圧力値を問い合わせ。センサーモジュールが圧力値を返してる
ポーリング処理。

float _pressure = m_wheel[n]->GetPressureState();
0370名前は開発中のものです。2008/09/19(金) 19:13:57ID:FmM/zRja
ほしゅ
0371名前は開発中のものです。2008/10/05(日) 14:32:14ID:tMuqv+yj
このスレはJavaでも大丈夫なの?
0372名前は開発中のものです。2008/10/05(日) 14:52:40ID:v7IsXRIY
>>371
質問内容の分野がよくわからないなら、以下へどうぞ。

【初心者】スレを立てる前にココで質問を【Part17】
http://pc11.2ch.net/test/read.cgi/gamedev/1210443288
0373名前は開発中のものです。2008/10/05(日) 17:40:56ID:6np9SFhP
>372がエスパーすぎる
0374名前は開発中のものです。2008/11/01(土) 11:27:07ID:g//jQFBy
データ(アイテムとかマップとか)ってどうやって作ってます?
エクセルで打ち込んでcsvで保存?
0375名前は開発中のものです。2008/11/01(土) 12:46:01ID:YmfIaKZ8
別にそれでいいし
専用にエディタ作ってもいいし
ありもので済ませてもいいし
俺はPlatinum map editor使ってるし
0376名前は開発中のものです。2008/11/01(土) 12:58:04ID:g//jQFBy
>>375
マップに関しては、フリーのエディタがあるんですね。

規模が小さいゲームなら、アイテムとかはエクセルが効率いいのかな。
0377名前は開発中のものです。2008/11/01(土) 16:47:28ID:NlVHrve1
既存のマップツールは便利なんだが、結局そこから独自形式へのコンバータを作ってる。
0378名前は開発中のものです。2008/11/02(日) 08:08:32ID:JeGt0JB9
海岸線自動生成とかやってくれるエディタあるっけ?
0379名前は開発中のものです。2008/11/02(日) 09:02:07ID:i1X6CLvS
>378
エディタでやるの?
0380名前は開発中のものです。2008/11/04(火) 18:29:40ID:CIBt14+U
機能としてはエディタ側じゃね?
0381名前は開発中のものです。2008/11/06(木) 00:16:08ID:46fvhfrF
ツクールで海岸線をシフト+右クリックすると分かる
0382名前は開発中のものです。2008/11/11(火) 20:24:09ID:rtOtwyEd
最近Gofのデザインパターンを読んで、目から鱗が落ちまくった。
今までぐだぐだやってたのが全部無駄というか馬鹿だったのに気づいてしまった。
他の初心者がこんなことが起きないように、勝手にメモ。

1、相互参照は可能ならば避ける。どちらかが一方的に知り、メソッドでその都度渡すほうがいい。
→クラス図の関連の矢印の向きは重要。関連が1方向なら、関連される(変数として保持される側の)クラスの再利用が容易。
→相互参照関係にあるクラス同士を、一方的な関連にすることは大抵の場合可能なはず。(関連する側が冗長になるが。)

2、再利用を考えたフレームワークは(初心者は)作らない。
→再利用のための部品を作る程度にとどめるのがいい。フレームワークの設計は正直拡張性を考え出すと難しすぎるらしい。

他に鉄則があったらだれか教えてください orz


0383名前は開発中のものです。2008/11/12(水) 01:30:10ID:LsEQ4TEa
相互参照すると、クラス開放時にお互いが争ってメモリリークすんだよな
クラスA「Bさん、お先にどうぞどうぞ」
クラスB「いえいえ、ここはAさんがお先に」
クラスA「どうぞどうぞ」
OS「おまえら、どっちもさっさとイケ!」
ピー…
0384名前は開発中のものです。2008/11/12(水) 09:02:45ID:QWqH0Tgg
> Gofのデザインパターン
GOF本でわかったならよいけど、退屈でわからない人は
First Headの本オススメ

Head Firstデザインパターン―頭とからだで覚えるデザインパターンの基本: エリック フリーマン, キャシー シエラ, エリザベス フリーマン, バート ベイツ, Eric Freeman, Kathy Sierra, Elisabeth Freeman, Bert Bates, 佐藤 直生, 木下 哲也, 福龍興業: Amazon.co.jp: 本
http://www.amazon.co.jp/dp/4873112494
http://images-jp.amazon.com/images/P/4873112494.09.MZZZZZZZZZ.jpg
0385名前は開発中のものです。2008/11/12(水) 23:23:14ID:hxIHNKys
ライブラリを作るとして、名前空間とクラスはどのように配置するのがいいでしょうか。

たとえば、ある単純な機能のクラスがいくつかあります。
これを集約してより大きな機能のあるクラスがライブラリ内で作られている場合、
1、大きなクラスをネスト先の名前空間に入れる。(HogeLibrary.Composite)
2、小さなクラスをネスト先の名前空間に入れる。(HogeLibrary.SmallComponent)
3、そもそもが間違い。同一名前空間に配置する。

どれが適切でしょうか?
0386名前は開発中のものです。2008/11/13(木) 21:08:31ID:3NMFClPL
>>385
boostでは、ライブラリ利用者が直接触る必要ないものはdetailっていうネームスペースに入れてあるね。

ってそういう話じゃない?
0387名前は開発中のものです。2008/11/14(金) 01:18:47ID:USS/q0/d
>>385
名前空間を分けるメリットが見当たらなければ分けないほうがいいでしょ。
0388名前は開発中のものです。2008/11/16(日) 02:04:27ID:OW89wflh
ライブラリ利用者の立場にたって、
どうなってると使いやすいかを考えて臨機応変に決める。
0389名前は開発中のものです。2008/11/19(水) 20:47:58ID:oq/eqnIP
>>382-384
まだ読んでいない俺には勉強になったthx
0390名前は開発中のものです。2008/11/20(木) 09:17:22ID:jP0yKBYe
>>384
のFirst Head本は、読み物形式で
悪いコードをよいコードに変更していきながら、解説しているようになっているので、
GOF本よりかなり読みやすいよ

ただ、いくつかのパターンが省略されて適当解説になっているので、注意。
適当になってる後半部分も解説されていたらかなり神本だった
(まああのペースで全部網羅すると、値段とページがすごいことになりそうだがw)
0391名前は開発中のものです。2008/11/30(日) 20:02:56ID:GlMxgFAf
すいませんというか疑問です。
特定の条件を満たしたら処理(入力の読み取り)を行う、という作業を内部で行う関数を作ろうと思ったのですが、疑問がいろいろ出てきました。
(1回のループの中に複数この関数を配置して、どこかで実際に実行する、というような使い方を想定してます。)

1、この関数を採用する場合、名前の付け方
Polls()、CanPoll()、IsPolling() …主目的が『必要ならば読み取る』なので何かしっくりしない。

2、何かよりよい代替の設計があるだろうか
何か設計が変な気がする、が、なぜそう思うのはわからない。

どなたか導きをお願いします







0392名前は開発中のものです。2008/11/30(日) 20:03:41ID:GlMxgFAf
なんかいっぱい改行が入ってるorz
0393名前は開発中のものです。2008/11/30(日) 20:44:16ID:O5396ILY
>>391
関数の名前は内部での処理なんて割とどうでもいいので、
とにかくその関数の意味(挙動)がわかる名前にしたらいいんじゃね。

ちなみにJavaの場合、キーボードやマウスからの入力によってイベントが発生し、
そのイベントによって適切なリスナーの関数が起動されます。
プログラムの本流が直接読みに行くことなんてしません。

0394名前は開発中のものです。2008/12/02(火) 23:03:37ID:QPPOGJkH
>>393
気持ちが悪かったから、結局色々こねくり回して何とか別の方法で実装しました。
DirectInputのBufferedは偉大ですね、と。
0395名前は開発中のものです。2008/12/03(水) 00:00:25ID:QPPOGJkH
ついでにスレを読み返してメモメモ、と思った情報をまとめてみた。

コルーチン、マイクロスレッド、ファイバ
>>145,>>146,>>162,>>164

楽だが応用性のないありがちな実装
>>159,>>160

分業とデバッグ
>>194-213

ADVの画面クリックとか
>>270,>>271

メニュー画面の管理とかシーン管理とか
>>59-71,>>207,>>273-276>>302,>>305-314・・・VMCはたぶんMCVのことだよね?

状態管理とか
>>318-325

priateとgetter、setter
>>277-301

設計Tips
>>352-357,>>358-367,>>382-384
0396名前は開発中のものです。2008/12/13(土) 14:29:53ID:lcU0tpK0
ゲーム開発論を語るスレを立てようと思っていたんですが、すでに似たようなスレがあると聞いて相談にきました。
このスレがあるので必要ないのでは?という意見があり、新スレを立てるべきかどうか迷っています。
ご意見頂けないでしょうか?

↓ゲーム開発論スレ要望の経緯
http://pc11.2ch.net/test/read.cgi/gamedev/1206381315/

KONAMI、スクエニ、セガ、バンナム、コーエーの大手5社がゲーム開発現場の未来を再び討議
「5年後のゲーム開発現場を考える〜ゲーム会社技術開発の現場から2〜」
http://game.watch.impress.co.jp/docs/20080916/cedec_dev.htm

「Gears of War」はいかにして生まれたのか。Cliff Bleszinski氏が語る,有効なゲーム開発プロセス
http://www.4gamer.net/news/history/2007.03/20070309215934detail.html

Agile型開発でのゲームデザイン
http://www.4gamer.net/news/history/2007.03/20070311002313detail.html
0397名前は開発中のものです。2008/12/14(日) 06:46:04ID:foB3PhGt
>>396
ここは実装について話すスレなので、開発論は全くのお門違い。
とっとと失せろ!!
0398名前は開発中のものです。2008/12/14(日) 06:47:43ID:3zIx1sHY
想定通りでワロタ
0399名前は開発中のものです。2008/12/15(月) 01:28:13ID:AODSdSoN
>>395
ありがとう助かるよ
0400名前は開発中のものです。2008/12/18(木) 23:54:28ID:QLMqRIYY
キャラクタのデータはテキストファイルにゆだねて動的にできるけど
ふるまいはどうすればいいんだろう。
基本ふるまいをプログラムに実装して(静的)、テキストファイルで
その呼び出しを記述する(動的)とかなのかな。他に思いつかん。
0401名前は開発中のものです。2008/12/19(金) 12:11:03ID:ygbWfkiR
俺はそうしてる。
0402名前は開発中のものです。2008/12/21(日) 09:35:05ID:7nb+zy1b
つまりスクリプトですね。
0403名前は開発中のものです。2008/12/25(木) 19:24:07ID:QpPf00tD
知ってるよDIって言うんだよね
0404名前は開発中のものです。2008/12/26(金) 01:45:37ID:NBeqwEQB
最近でたセガのあれな本を読んで、自分がずっと詰まってたしょーもないことを勝手にメモ。
結論としては基本中の基本で、データと処理は独立させましょ、ってことなんだけど。

ゲーム中ができたけど、ポーズ機能を追加、ポーズメニュー表示関連をクラスで作って実装するには、という感じの想定。
こんな感じに管理してるとして(具体的にはもっと複雑だけど。)

class StgScene {
 Mover movers[];

 void Update() {
  //A
  for(・・・) {
   movers[i].Move();
  }
  //他判定処理等
  //B
  for(・・・) {
   movers[i].Draw();
  }
  //C
 }
}

・A〜Bまでの処理はポーズ時すっ飛ばす、となる。ので、関数化するなりクラス化したい。
・対象性を考え、Menuクラスに対してA〜Cの処理をPlayingクラスにする。(つまりSTGSceneはデータのみ。)
・MenuクラスにもB〜Cの処理を書き、追加してMenu関連の処理も記述する。

こうすると、結果的にSTGシーンはデータしか持たなくなって、処理はPlayingクラスやMenuクラスに任せる形になる。
見通しが悪くならずに拡張できる。
今までずっと気づかなかった自分の頭の悪さに笑うしかないぜ。
0405名前は開発中のものです。2008/12/26(金) 08:47:36ID:Y8oI6MzT
「勝手にメモ」を書き込んでくれる人(達?)の存在は、正直ありがたい
0406名前は開発中のものです。2008/12/28(日) 17:34:36ID:pzJs6/UU
MVCでいうと、
M:StgScene
V,C:Menu,Playing
ってことなのだろうか?
Stateパターンという風にも捉えられる?
0407名前は開発中のものです。2008/12/29(月) 00:45:07ID:THn3O3Oz
Stateパターンだとこんなかんじかね?

struct StgScene {
 void A();
 void B();
 void C();
};

class State {
 virtual void Update(StgScene&) = 0;
};

class Playing : public State {
 virtual void Update(StgScene& scene){
  scene.A();
  scene.B();
  scene.C();
 }
};

class Menu : public State {
 virtual void Update(StgScene& scene){
  scene.C();
 }
};
■ このスレッドは過去ログ倉庫に格納されています