トップページgamedev
1001コメント599KB

タスクシステム総合スレ part3

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/11/09(日) 11:51:40ID:+pjnJyQQ
タスクシステムについての議論、相談、質問、雑談などのスレです

part2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
0002名前は開発中のものです。2008/11/09(日) 11:56:00ID:+pjnJyQQ
White Paper - Programming
http://homepage3.nifty.com/moha/programming.html

タスクシステム
http://www5f.biglobe.ne.jp/~kenmo/program/task/task.html

CodeZine:本格的なシューティングゲームを実現するタスクシステム(タスクシステム,シューティング,ゲーム)
http://codezine.jp/a/article.aspx?aid=297

Logician Lord … 【コンピュータゲームのからくり】
※ウェブアーカイブのキャッシュ
http://web.archive.org/web/20041009222313/www.hh.iij4u.or.jp/~peto/Games/games_top.html
0003名前は開発中のものです。2008/11/09(日) 12:19:21ID:Jr7+0IfN
1乙
0004名前は開発中のものです。2008/11/09(日) 13:02:33ID:Pg+PR9ol
1おつ


前スレ>>995を実行しようとしたら、
「MSVCP60D.dllがみつかりません」って出て実行できんです。

0005名前は開発中のものです。2008/11/09(日) 13:37:28ID:95rhOgJ5
同じく下記2ファイルがみつかりませんと出てきた

  MSVCP60D.DLL
  msvcrtd.dll
0006名前は開発中のものです。2008/11/09(日) 15:05:15ID:clryvbVu
windows用の関数のスタブを用意したりして
linuxにてコンパイルして動作確認はできた
boost, boost build必須だけど…
0007名前は開発中のものです。2008/11/09(日) 15:15:38ID:clryvbVu
boostはいらんな、
なんかCTextBuffer::Openで落ちるから色々調べてたときに使ってただけね
パスやらファイル名の問題で*.mqoが開けなかったときにぬるぽが発生して落ちてただけね
あとglutの初期化忘れとか

タスクシステムと全然関係無いですねゴメソ
0008名前は開発中のものです。2008/11/09(日) 21:43:46ID:+pjnJyQQ
>>4
それVC6のデバッグ版のDLLだな
うちは入ってるから気づかなかったが

>>995はリリース版でビルドしちゃれよ
0009名前は開発中のものです。2008/11/09(日) 22:46:40ID:G/ueWH6s
>>8
もしくは CRT をスタティックリンク。
0010名前は開発中のものです。2008/11/09(日) 23:28:18ID:zHkW8xfN
ここで10年前に買ったVC6の恩恵を初めて受けることになるとは
0011名前は開発中のものです。2008/11/10(月) 22:26:56ID:nDrMpAC2
>MSVCP60D.dllがみつかりません

だっせー!>俺
すびばせんでした。再うpしました。

http://uproda11.2ch-library.com/src/11133655.zip.shtml

DLキー task

修正項目
・実行ファイルを Release ビルド
・背景スクロールを実装してみた。
・データローダの別スレッド動作のテストなど
0012名前は開発中のものです。2008/11/10(月) 22:36:07ID:nDrMpAC2
>>7
ガッ!(AA略)

>linuxにてコンパイルして動作確認はできた
さすがゲーム板。いや、LinuxでブートCD配布とかできたらと思ってたので。

>前スレの人
・実行順制御よりオブジェクト相互の関係が重要

サンプルを組んでみて、そのあたりの解決が提示されているわけではなさそうですね。< タスクシステム

サンプルのなかで、プレーヤーオブジェクトをポインタで保持してたり、その弊害を
避けるためにフラグ立ててたりとけっしてスマートとはいいがたいような。

TCB+関数ポインタをクラスで置き換えるのは悪いとはいわないが、オブジェクトの
生成削除が頻繁に起こるゲームで、std::listで管理するのはどうかなと思いました。
手軽ではあるのだけど。
0013名前は開発中のものです。2008/11/10(月) 22:42:17ID:nDrMpAC2
>前スレの人
>実行順制御・描画順制御
まだ慣れていないので評価しにくいですが、サンプルではシナリオの読み込みとか優先度を高くしてありますね。それなりに意味はあるのか?

描画順制御についていえば、OpenGL を使っていても半透明オブジェクトの重ねがき
みたいに描画順をメンテする例もあるので、まあ、あれば使うかなと。
(爆発表現にちょっとつかってみた)

描画に関してはもっとちゃんとしたやり方があるように思いますが。
0014名前は開発中のものです。2008/11/11(火) 22:13:14ID:BOKiifWA
>>12
> オブジェクトの生成削除が頻繁に起こるゲーム
今時のマシンなら高がしれてるよ。エフェクトでパーティクル個別に new するとかだと、さすがに
氏ねと思うが。
0015名前は開発中のものです。2008/11/11(火) 23:33:37ID:YONi9ugo
>>14
>今時のマシンなら高がしれてるよ

CPU負荷や処理速度じゃなくて、サンプルの例だと、stl::list からオブジェクトを
削除する場合のトリッキーに見える処理がちょっといやらしいかなと思ったんですよ。

ただ、シーケンシャルな処理だと考えればそんなに問題もないのかな。
0016名前は開発中のものです。2008/11/11(火) 23:45:14ID:BOKiifWA
>>15
そういう話なら同意。というか、何でもかんでも一つのリストにつながなくても、ふつーに
std::list<Enemy> enemy_list;
std::list<Effect> effect_list;
と分けとけば良いのにね。
0017名前は開発中のものです。2008/11/11(火) 23:45:44ID:bfqrEb/4
今時のマシンでもメモリ問題は意識すべきだよ。
少なくとも自分以外の人に遊んでもらえるゲームを作るつもりならね。
モジュールのライフスパンに応じて適切にヒープを分けるだけなんだから
最初からやれば手間はかからない。

今時はコンシューマゲーム機の開発者でさえもメモリ管理をおろそかにする未熟者が多い。
マスターアップ近くになってフラグメント化のためゲームがハング。
対策を練ろうにもグローバルでnew、deleteだったから全部書き直しするしかないという
実話もあるほど。
0018名前は開発中のものです。2008/11/12(水) 00:46:23ID:N/n8r37l
1GHz 512MB VRAM8MBで起動した
超絶スローで
0019名前は開発中のものです。2008/11/12(水) 01:05:05ID:sxpmqDHH
>>17
CodeZine のサンプルはメモリ管理にこだわってたよね。
「タスクシステム」の要件にメモリ管理を加えるべきか、みたいな
話もあったけど。
0020名前は開発中のものです。2008/11/12(水) 01:07:38ID:sxpmqDHH
>>18
>VRAM8M て、trio64とか?w
さすがにOpenGL のハードアクセラレーションないとちょっときついかと。
0021名前は開発中のものです。2008/11/12(水) 06:58:36ID:3e5+3Sl/
>>17
> 対策を練ろうにもグローバルでnew、deleteだったから全部書き直しするしかないという

なんでそうなるんだ?
「モジュールのライフスパンに応じて適切にヒープを分けるだけ」なんだろ?
後でもできるじゃん。
0022名前は開発中のものです。2008/11/12(水) 08:16:49ID:qQkBoxEr
>>17
メモリの断片化が問題になるのは、極端にサイズが大きいものと小さいものを
同じヒープから確保する場合。

テクスチャ・モデル・モーション・サウンドなどのリソース類だけ分けておけば、
あとのゲーム制御用のインスタンスは気にせずグローバルなヒープから new,
delete で OK だよ。
0023名前は開発中のものです。2008/11/12(水) 12:09:14ID:eqQiBZB/
そんなどんぶり勘定が許されるのは素人ゲーだけだよ
少なくともヒープ使用量の最大値は見積もれていないと
売り物にしてはいけないね。
フラグメント化対策の方法論なんて確立されているんだから
それをおろそかにするのは単なる手抜き以外の何者でもない。
0024名前は開発中のものです。2008/11/12(水) 12:25:51ID:3e5+3Sl/
まったくだ。

「おそいかも」とか「フラグメンテーションが発生するかも」なんていう
どんぶり勘定で面倒なメモリ管理コードなんて追加しちゃいけない。

「ここがおそいことがわかったから」「ここでフラグメントが問題になったから」と
言えるなら何か細工を入れてもいい。言えなきゃおとなしく new/delete 使っとけ。
0025名前は開発中のものです。2008/11/12(水) 12:41:37ID:beD99wJ7
問題になるまではGCやsmart_ptrを使っていてもおkと
0026名前は開発中のものです。2008/11/12(水) 13:08:03ID:IOwBN/Qz
いいよ
仕事でやってるやつはみんな何回も痛い目見てるから自然と神経質になる
問題が出ないうちから考えてもアタマでっかちになるだけ
0027名前は開発中のものです。2008/11/12(水) 23:22:51ID:qQkBoxEr
>>23
> そんなどんぶり勘定が許されるのは素人ゲーだけだよ
気のせい。
0028名前は開発中のものです。2008/11/13(木) 05:53:34ID:4jJZotVw
newとdeleteはやたら使用メモリの全体量がわかりずらいな
mallocからしてロクなもんじゃなかった気がするけど
newとdeleteほどアフォ仕様じゃなかったよな
オーバーロードするといちいちそのヘッダ呼ばないと
newとかdeleteとか呼べないしで糞面倒くせぇ

せめてデバッガで見えれば助かるんだけどそういう機能ってないの?
0029名前は開発中のものです。2008/11/13(木) 07:37:37ID:bFvJK9Je
>>28
ふつー ::operator new() ではなく、クラス内の operator new をオーバーロードするから、
必然的にヘッダ読み込むことになると思うが。

メモリ使用量は、使ってるライブラリによるな。俺は自前で書いたのがあるから、それを
使ってるけど。
0030名前は開発中のものです。2008/11/13(木) 16:57:10ID:YYgyTJOh
タスクシステムと分岐予測やパイプラインの関係を考察してるようなサイトありませんかね?
ググッてもこのスレばかりヒットしますw
0031名前は開発中のものです。2008/11/13(木) 19:06:42ID:rnZd7PxY
>>28
>mallocからしてロクなもんじゃなかった気がするけど

それ実装対象・OS・ライブラリの組み合わせに依存した話
例えばおまいらが大好きなx86系PCとWindowsとVisualStudioの組み合わせの場合
VS付属のmalloc、デフォルトのnew/delete、STLのデフォルトアロケータの中身を見れば
どれもHeapAllocに行き着く

暇だった頃にベンチマークテストして遊んだけどHeapAllocが他のアロケータ
(GNU libc malloc、BSD Malloc、etc)と比べてロクでもないという感想にはならなかったな。
HeapAllocはおそらくDoug Lea Mallocそのものかその親戚筋に相当する実装だろうと思う。
>>28はdlmalloc系がロクなもんじゃないと言いたいの?それともヒープ使用量をモニターする
手段が見つからないからロクなもんじゃないと言いたいの?
0032名前は開発中のものです。2008/11/13(木) 19:34:18ID:rnZd7PxY
>>22
>極端にサイズが大きいものと小さいものを
>同じヒープから確保する場合

「極端に生存期間が大きいものと小さいものを同じヒープから確保する場合」
も付け加えといとくれ
0033名前は開発中のものです。2008/11/13(木) 20:38:35ID:rnZd7PxY
>>32だけど>>21で既に生存期間の話出てるね。文盲だね

ネトゲのサーバプログラムとかだとオブジェクトの生存期間の差はかなり強烈なものになるから
例えばWindows系ならHeapCreateとかで適切にヒープ領域を分けといたりするけれど、PCゲーの
クライアントプログラム限定の話ならぶっちゃけこんなの要らん

数ステージを巡回するデモンストレーションモードで数日間ぶん回してメモリ確保に失敗し始めたり
タスクマネージャのグラフが愉快な絵を描いてるとかNtQuerySystemInformationでログ取り続けたら
驚きの結果が、とかならフラグメンテーション云々の可能性を考えてもいいかもだが

そういう場合はステージ毎にHeapCreate/HeapDestroyでドバっと確保・ドバっと開放でもしとけばいい。
これならステージ中のオブジェクトはみんなHeapAlloc系使ってもフラグメントの心配いらね
弾とかパーティクルみたいなサイズ・生存期間共に粒度極小のオブジェクトを大量にばら撒く
ゴジャースなゲームなら表示MAX分だけドバっと確保したboost::pool使うか配列で順序なしのリスト
みたいなことやっとけばいいよ

ところでタスクシステム?ハァ?って感じだな
0034名前は開発中のものです。2008/11/13(木) 21:32:18ID:4jJZotVw
>>31
俺はそんな難解な話してない
使ってるメモリの使用量がわからない・わかりにくいってただそんだけのこと
あと、メモリリークとかも全然わかんねぇ
IDEの問題になるけど分かる要素がないのがひでぇl

で、俺の知識だけだと自分でmallocをラップした関数を実装して
それに使用メモリの総量・使用メモリ状況やメモリリークなんかを
チェックできるようにしてるんだけど

この辺っていつまでたってもウンコじゃね?
とかそういうこと言ってる

(俺が知らないだけかもしれんが少なくともVCはウンコだと思う)
0035名前は開発中のものです。2008/11/13(木) 21:49:37ID:bFvJK9Je
>>30
マジに最適化し出すと、関数の並び順とかまで見直す必要がある。PS2 のときには
キャッシュがマジ少なかったので、ライブラリチームは T15000 使って最適化してたけど、
今はそこまでやってないんじゃないかなぁ。

ゲームロジックはキャッシュミス起きまくりだが、そもそも大して CPU 使ってないので
気にしない。昔も今も。
0036名前は開発中のものです。2008/11/13(木) 21:51:07ID:bFvJK9Je
>>33
パーティクルとかの小さなオブジェクトは STLport の node allocator 使ってた。メモリが
多少無駄になるけど、早いし断片化しないので。
0037名前は開発中のものです。2008/11/13(木) 21:56:23ID:rnZd7PxY
>>34
確認するが、CRTデバッグヒープくらいは使ってるという前提でいいよな?
http://msdn.microsoft.com/ja-jp/library/974tc9t1(VS.80).aspx
その上で不満ということならもう少し詳しくお話をしてほしい

もし使ってないってんなら幾らなんでもネタだろう…(´-`)
■ このスレッドは過去ログ倉庫に格納されています