ゲームにおけるデータ構造・クラス設計・パターン2
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/05/23(金) 21:10:59ID:8M1gqhPXどのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
前スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1155209226/
テンプレ追加事項あったらよろすく
0535名前は開発中のものです。
2009/10/15(木) 07:50:05ID:P3b4xThD0536名前は開発中のものです。
2009/10/15(木) 08:41:22ID:OtHf9VTl0537名前は開発中のものです。
2009/10/15(木) 15:54:18ID:byjv3si3オタクの頭ん中は
0538名前は開発中のものです。
2009/10/15(木) 20:13:55ID:P3b4xThD意見を頂けるだけで嬉しいです.
むしろ噛み付くほうが迷惑です.
0539名前は開発中のものです。
2009/10/15(木) 22:16:10ID:r8d5RKMA質問は実際のゲーム開発だから、面倒でも形式的にやるしかないんじゃない。
0540名前は開発中のものです。
2009/10/15(木) 22:18:05ID:2byzEsEEアクセッサ書くのめんどくさいって言ってたら
コーディングが意味不明になってやる気をなくす自信がある。
実際それで何回も挫折した。分かりにくくなるくらいならメンドイ方がマシ。
0541名前は開発中のものです。
2009/10/15(木) 23:29:40ID:r8d5RKMAアクセッサ書くのもめんどくさいとは思わない。
0542536
2009/10/16(金) 00:35:50ID:L+kS7tAJ悪い、噛み付くとかそういうつもりは無かった。
普通に設計して、グローバルにアクセスする必要があるデータを持ってるクラスだけ
Facade経由でアクセスできれば良いんじゃないかと思っただけ。
グローバル変数はさすがにあり得ない…
0543名前は開発中のものです。
2009/10/16(金) 01:18:33ID:MsmDVyev参考になりました,ありがとうございます.
0544名前は開発中のものです。
2009/10/16(金) 01:38:32ID:tEeFyBBHスタティックグローバルな変数を、何らかのアクセス関数を通して更新/参照するような設計は普通だと思う。
// gamedata.h
void update();
int get_parameter1();
// gamedata.cpp
static int s_paramter1 = 0;
static int s_paramter2 = 0;
....
void update() { /* 更新 */ }
int get_parameter1() { return s_paramter1; }
唯一しか存在しないゲーム中のデータをどう実装・管理するか、って視点だけで考えれば
スタティックグローバルであろうと、クラスであろうと大差ないと思うけど、
ある時点でのスナップショットを扱う必要がある、みたいな場合、
// gamedata.h
void update(Data* gamedata);
int get_parameter(Data* gamedata);
て感じで、結局データを引数で取る形になるから、クラスで実装して方がいいんじゃないかと思う。
0545名前は開発中のものです。
2009/10/16(金) 06:29:56ID:UJ9WR3Zt変数を直接弄るんでもいいかな・・・。
0546名前は開発中のものです。
2009/10/16(金) 11:40:43ID:/PDPq+0/そういう可能性を考慮すると、関数を経由させたほうが便利。
0547名前は開発中のものです。
2009/10/16(金) 20:07:25ID:eJ9LLkd5そうでないと大変そうだな。デバッグ一件で1時間とか悩みたくないし。
0548名前は開発中のものです。
2009/10/18(日) 12:51:59ID:Yr/zm5ey確かに使い方を間違えるってのはよく起こる
0549名前は開発中のものです。
2009/10/25(日) 23:29:18ID:tIk7fQwv次に来るシーンを各クラスに設定しておいたりとか・・?
0550名前は開発中のものです。
2009/10/25(日) 23:57:46ID:6R6DoQXiGems5巻にいいのが載ってたと思うよ。
とりあえず Google [スタックベースのシーン管理 gems]。
0551名前は開発中のものです。
2009/10/26(月) 00:08:52ID:PLlfj58P0552名前は開発中のものです。
2009/11/16(月) 14:29:49ID:FF5xAAX0その後どうなった?
俺も今描画周りを考えてる
0553名前は開発中のものです。
2009/12/13(日) 15:40:07ID:Pf4hrG82void Create(LPDIRECT3DDEVICE9 lpD3DDEV)
{
jiki = new Jiki();
jiki->Create(lpD3DDEV);
}
void Draw(LPDIRECT3DDEVICE9 lpD3DDEV)
{
jiki->Draw(lpD3DDEV);
}
って風にやったら問題あるの?
0554名前は開発中のものです。
2009/12/14(月) 01:36:46ID:etpwNEHLdevice呼び出しが長くなるが、面倒なら#define
俺はこんな感じ
無知なんだけど、デバイスて何個も必要になることあんの?
0555名前は開発中のものです。
2009/12/14(月) 01:57:52ID:ViaP5WDz0556名前は開発中のものです。
2009/12/14(月) 03:13:37ID:etpwNEHLそうでないなら同じようなクラスを用意するかな
便利だからグローバルにしてるわけだし
仕方ないとおもってる
必要な関数ごとにデバイス渡すとか面倒すぎる
まあ、何十個もデバイスがいるわけじゃないからできる荒い方法ではあるんだけどな
0557名前は開発中のものです。
2009/12/14(月) 11:05:57ID:QE4kvqHrプレイヤーが増えるとかいった仕様にしたいなら
コントローラのデバイスは動的に管理した方がいいと思う。
0558名前は開発中のものです。
2009/12/14(月) 14:08:44ID:lLcah1pB(左右同時に押された場合は後からの入力を優先)
コントローラが壊れて常に右側に入力があるみたいな状態になるとうざったそうだな
0559名前は開発中のものです。
2009/12/14(月) 15:35:13ID:ViaP5WDz0560名前は開発中のものです。
2009/12/21(月) 22:25:25ID:F5CW/HFFそれらしいことがのってる
more effective c++と、Accelarated C++
のどちらの本が役立ちそうでしょうか?
boostソース読めってのは無しでお願いします。
0561名前は開発中のものです。
2009/12/21(月) 23:10:45ID:yYVJ9W7O「スマートポインタ」でググれば解説もサンプルも見つかるよ。
0562名前は開発中のものです。
2009/12/22(火) 01:26:27ID:Q5u6VebDなんで boost::shared_ptr 使わないの?
0563501
2009/12/30(水) 05:37:23ID:CHdRD74o描画スクリプトっぽく進めてる。>>510 の言うとおりの方法。
>各オブジェクトには描画スクリプトみたいのを作らせておいて、draw()がそれを解釈して描画とか?
描画スクリプトみたいなのを作るほうがプログラム構造は単純になった。
>>511に書いたやり方は結局デバイスアクセス処理が分散していて大して煩雑さは改善されなかった。
簡単な2Dゲームだと描画は大部分が画像描画コマンドだけで構成されてた。思ってたより単純。
あとは少ないながらもカメラ位置変更コマンドと文字列描画コマンドも使った。
コマンド構造体を配列に突っ込んでカウンタを+1とかしてコマンド列(描画スクリプトみたいの)を作ってる。
あと画像描画コマンドでは描画すべき画像は番号で指定してる。番号に対応する画像を用意するのは解釈側の責任。
デバイスデータの引き回しはなるべく避けたかったので。
デバイスを関数間で無闇に引き回さなくても済むようになったので気が楽だし、
メモリデータの変更だけで描画内容が変わるのもおもしろい。
やって良かったと思ってる。
0564501
2009/12/30(水) 22:40:42ID:CHdRD74o>各オブジェクトには描画スクリプトみたいのを作らせておいて、draw()がそれを解釈して描画とか?
自分の場合、描画スクリプトを作るのは「各オブジェクト」というより「各シーン管理オブジェクト」になった。
つまり
シーン管理オブジェクトが自身の所有する各オブジェクトの情報をアクセサ経由で読み取って
描画スクリプトみたいなものを組み立てる。
たくさんある細かい各オブジェクトに描画スクリプト的なものを作成させるのは責任というか依存性が散らばりすぎて複雑になる。
だから数の少ない管理オブジェクトがconst修飾済みの読み取り専用オブジェクトから得た情報だけを元に描画スクリプト的なものを組み立ててる。
0565名前は開発中のものです。
2009/12/31(木) 08:32:52ID:QBEbvaiT内部で使うのは番号(ID)だとしても、人間にとっては名前の方が分かりやすいし
0566名前は開発中のものです。
2009/12/31(木) 15:10:35ID:wXwu3da7Google App Engine+Flash(Flex)でノベルもどき作ってるけど、まさにそれやってるわ。
GaeなんでsqliteじゃなくてGoogle Big Table使ってるけどね。
スクリプトはForthベースの俺々スクリプトだけど、
SilverlightだとPythonやRubyエンジンが使えるので、
次作るときはそっち使おうかなと思ってる。
0567名前は開発中のものです。
2010/01/04(月) 06:09:33ID:JxRYn/a0たしか、mixiアプリのモバイルゲームでGAE使った事例があったな。
3000万PV/月をかなり安価で乗りきれるとか
Togetter(トゥギャッター) - まとめ「100万PV/日のmixiアプリモバイルをGoogle App Engineで実装した@gclue_akira氏に直撃インタビュー」
http://togetter.com/li/494
すれ違いの話題になるが、昨今のネットが絡むゲームの場合バックエンドの技術も必要だけど、
そういう話題を扱ったスレってないものかな
この板にネットゲームの開発時代が少ないみたいだから、需要はないのかもだけど
まーGAEならWebProg板のAppengineスレ行けばいいしな
0568名前は開発中のものです。
2010/01/04(月) 06:10:39ID:JxRYn/a0o 開発自体
0569名前は開発中のものです。
2010/04/20(火) 00:42:02ID:pYU4LjYZ0570名前は開発中のものです。
2010/05/11(火) 16:43:34ID:mK0DmPV50571名前は開発中のものです。
2010/09/20(月) 21:23:17ID:Qy1aznUBどういう風にクラス分けすればいいか悩んでます
MAPクラス
Playerクラス
GameFrameクラスの3つがあって
mainループで
switch(MODE)
{
case TITLE:~~~~;break;
case MENU:~~~~;break;
case STAGE01:~~~~;break;
case STAGE02:~~~~;break;
.
.
.
}
みたいなことをしています。
各Stageに行くたびに、ステージ前処理と、ステージ後処理をしたいです
というとコンストラクタとデストラクタ……つまりはクラスを使えばいいんじゃないか?
という感じなのですが
Playerクラスの持っている情報と、操作関連を上手く融合させたり
Mapクラスの持っている情報と、Playerクラスを上手く組み合わせたりが出来ません……
こういう部分はどういう風にデザインするのがいいのでしょうか
0572名前は開発中のものです。
2010/09/21(火) 03:43:33ID:l4LB0P7iファミコンの「ドラえもん」みたいな、1面と2面で全く違うゲームになるなら別だけど。
0573名前は開発中のものです。
2010/09/23(木) 17:38:03ID:g80tUxgWTitleクラスとMenuクラスとStageクラスを追加するとか。
その上で、StageをPlayerとMapのメディエータとして実装する、というのはどうだ?
0574名前は開発中のものです。
2010/12/04(土) 11:15:23ID:bbisnDl0貴方は俺か
クラス名と悩みが殆ど同じとかw
0575名前は開発中のものです。
2010/12/04(土) 14:39:29ID:t6Qi73J8ちょっと難しいかもしれないが
ttp://marupeke296.com/GDEV_main.html
ここはかなり参考になる気がするよ。サンプルもあるし。
その6とその7ね。
0576名前は開発中のものです。
2011/02/02(水) 03:54:28ID:uhRk4Rqb0577名前は開発中のものです。
2011/05/20(金) 08:10:28.28ID:PnmAmJ/W0578名前は開発中のものです。
2011/08/02(火) 05:21:50.11ID:jrRNxlOfhttp://labs.techfirm.co.jp/android/cho/1283
http://labs.techfirm.co.jp/android/cho/1293
オブジェクト生成は避ける
インターフェースは使わない
スタティックメソッドを使う
クラス内部でgetter/setterは使わない
foreachループは気をつける
携帯端末だとオブジェクト指向をある程度捨ててパフォーマンスを稼ぐって形が
求められるみたい
こういう環境のゲームは、どういうデータ構造・クラス設計を採用すべきかってのも
気になるな
0579名前は開発中のものです。
2011/08/02(火) 12:43:43.47ID:w6MyIbcF0580名前は開発中のものです。
2011/08/04(木) 13:31:14.84ID:OiYK4POHあの制限ばかりの時代を経験した世代の方が
開発に向いていたりしてw
0581名前は開発中のものです。
2011/08/09(火) 01:57:38.36ID:/4Pi5/Qb0582名前は開発中のものです。
2011/08/09(火) 20:19:58.06ID:9GJ5MiVh面倒が起きやすいんじゃないか
0583名前は開発中のものです。
2011/08/15(月) 07:32:13.82ID:zPArLam8消えてるみたい
どこか掲載されるサイトしらない?
0584名前は開発中のものです。
2011/08/21(日) 15:33:02.73ID:IUtyM1fdキャッシュとかも見たんだけどさ
0585名前は開発中のものです。
2011/09/04(日) 02:30:22.85ID:novGGJeqそうかもしれない。
その世代が今のゲーム現場で老害化してるんでむしろ行って欲しい。
■ このスレッドは過去ログ倉庫に格納されています