ゲームにおけるデータ構造・クラス設計・パターン
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2006/08/10(木) 20:27:06ID:BnvyxuCBどのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
0741名前は開発中のものです。
2008/02/19(火) 22:44:36ID:sVjxRGgGみんなどうしているんだろう…
CGやBGMのロード、キーチェックをどこで実施すべきか悩んでしまう
↓だいたいこんな感じで組んでいるけど変?
//----main.cpp----
int WINAPI WinMain( ... ){
GameFrame *game = new GameFrame();
game->doMainLoop();
delete game;
}
//---gameframe.cpp---
void GameFrame::doMainLoop();{
loadCG();//ここ?
loadBGM();//ここ?
while(ProcessMessage()==0 && ...){
switch(gameState){
case GAME_DEMO : drawGameDemo ();break;
case GAME_TITLE : drawGameTitle();break;
case GAME_MAIN : drawGameMain ();break;
...
}
...
}
void GameFrame::drawGameMain(){
checKey();//どこに入れよう?
drawBG();
drawEnemy();
drawPlayChara();
drawHoge();
}
0742名前は開発中のものです。
2008/02/19(火) 22:58:48ID:kk7YgASyvoid GameFrame::doMainLoop() {
// シングルトン系の処理実行
g_pad.exec(); // パッド入力処理
g_file_loader.exec(); // ファイル非同期読み込み処理
// その他の処理実行
std::for_each(m_task_list.begin(), m_task_list.end(), boost::bind(&Task::exec, ::_1));
std::for_each(m_task_list.begin(), m_task_list.end(), boost::bind(&Task::draw, ::_1));
m_task_list.remove_if(boost::bind(&Task::needGC, ::_1));
}
こんな感じだと思うが。ファイルの読み込みは Task 派生クラスの exec の中で
TestTask1::exec() {
switch (m_state) {
case INIT:
g_loader.load("file1.arc");
++m_state;
break;
case LOADING:
if (g_loader.isLoaded("file1.arc"))
++m_state;
break;
case MAIN:
...
}
って感じで。マジメに作るとファイルは事前にアーカイブ&圧縮しておいて、ロード時に
展開するとか、そもそも名前ではなく #define シンボルで扱えるようにして下らないバグを
出さないようにするとか、断片化防ぐためにメモリのセグメント分割するとか、いろいろ
あるけど。
■ このスレッドは過去ログ倉庫に格納されています