タスクシステム総合スレ part3
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/11/09(日) 11:51:40ID:+pjnJyQQpart2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
0129名前は開発中のものです。
2008/11/21(金) 21:53:14ID:HLQRvhCb0130名前は開発中のものです。
2008/11/21(金) 23:55:06ID:gOWsGtVr>配列で線形リストも組めない
どこかで queue を配列で組む入門例があったけど、そんなものじゃないだろうし、
だとしてもその線形リストで、まさかタスクシステムをつくるわけじゃなかろうし、わからん。
>雑魚が配列をバカにしてるのを見ると悲しくなるし
どのレスを指しているのか、わからん!
>このスレで主流の複雑な実装
どれだよ!>>43なんか、
>誰が書いても同じようなものになるってくらい凡庸な、道端の雑草並みのありふれた仕掛け
とかいってるぞ。凡庸でありふれて複雑て、どっちなんだよ。
>速度的に不利
いや、ロジックの部分は大して食いませんてば。最近のゲームはそうでもないのか?
>素直に配列さんごめんなさい
君が配列ラブなのだけはなんとなくわかったよ。ごめんな。
0131名前は開発中のものです。
2008/11/22(土) 06:09:06ID:gy1lHoyD0132名前は開発中のものです。
2008/11/24(月) 11:26:55ID:bZE/I6Oeいまどきのタスクシステムの仕様
1.クラス名、構造体名に「Task」を含む
2.描画物とそれ以外の処理を同列に扱える(ことがある)
これくらいじゃね
0133名前は開発中のものです。
2008/11/24(月) 23:39:25ID:0qULllkpを読んだけどタスクシステムなんて使ってなかった
普通に配列使ってて、配列の上手な使い方がのってた
やっぱプロは配列を使うんだね
0134名前は開発中のものです。
2008/11/24(月) 23:42:11ID:L4g5tFOs2chでしかでかい声は聞かない(マジで)
0135名前は開発中のものです。
2008/11/24(月) 23:58:55ID:c7RL3I32はいはい、配列さんごめんなさい。
>>133は、配列の利便性と構造体を使ったリストの有用性の違いがわかっていないようだ。
もう一度、データ構造を見直すことをお薦めする。
0136名前は開発中のものです。
2008/11/25(火) 00:45:31ID:iVVKZxJpおま・・・リスト使うか配列使うかの話かよw
セガがリスト使わないなんてありえないから、安心して両方の使い方を覚えような
ついでに二分木やハッシュも覚えておくこと
0137名前は開発中のものです。
2008/11/25(火) 00:58:47ID:nYppp7MYリスト : 削除、追加時のコストが安い。検索が遅い
リストは単純に舐めるだけでも遅い
ここで比べるべきなのはデータの検索(巡回)・追加・削除がゲーム中にどれだけ発生して
それを処理するにはどんなアルゴリズムとデータ構造がベターであるかだ
データの検索(巡回)よりも追加と削除のほうが多いゲームなどない
だからリストより配列のほうがゲームに適している
リストの有意点とはデータサイズの見積りをサボれるという一点に尽きる
たしかに配列のリサイズはゲーム中にはとても不可能だからこれは魅力だ
しかし、ゲームを製作する上で場面ごとに必要なメモリの見積もりなんてやって当たり前の話で
その程度の理由でリストを使うなんておかしい
以上の理由からゲームでリストを使う事はない
弾幕STG等ひたすら衝突判定を繰り返す場合なら
検索アルゴリズムの都合で配列よりツリーがベターな場合もある
(STG製作技術スレで話題になってたエリア別ツリー構造等。FPSでよく使われるが)
だから配列がベストとは言わないが少なくともリストに劣ることは無い
0138名前は開発中のものです。
2008/11/25(火) 02:46:59ID:WElvD00oタスクシステムは固定長データが重要とか言い出した>99あたり?
つか>126じゃないけどその対決って
どうしても勝ち負けを決めないといけないようなことなの?
0139名前は開発中のものです。
2008/11/25(火) 13:07:00ID:iVVKZxJpもっともらしくウソついてんじゃねーよ
わざと言ってんだろ。明らかに初学者に対して悪意のあるウソだな
>リストは単純に舐めるだけでも遅い
誤り。「単純に舐める」=シーケンシャルアクセスに有意差はない。
配列が有利なのはランダムアクセスの場合。
>データの検索(巡回)よりも追加と削除のほうが多いゲームなどない
比較方法の誤り。巡回回数と挿入回数を単純に比較しても意味はない。
コストの違いは以下のようにO記法で考えると分かりやすい。
・シーケンシャルアクセス(巡回)のコスト
配列はO(n):要素数が増えると処理時間が増える
リストもO(n):要素数が増えると処理時間が増える
・ランダムアクセス(インデクス値でアクセス)のコスト
配列はO(1):要素数が増えても処理時間は変わらない
リストはO(n):要素数が増えると処理時間が増える
・挿入、削除のコスト
配列はO(n):要素数が増えると処理時間が増える
リストはO(1):要素数が増えても処理時間は変わらない
O(1)はO(n)に対して非常に有利なので、
ランダムアクセスがありそうなら配列を、挿入がありそうならリストを選ぶのが一般的。
どちらもありそうなら実際に処理時間を計測してみるのが良い。
処理時間とは別に、メモリのフラグメントを嫌ってリストを避けたい場合は、
データ本体は配列構造に置き、管理はZソートされたリスト構造に、
というように両方を組み合わせる手法もある(C++オブジェクトをメモリプールするのと同じことだけどね)。
とにかく、初学者は「どっちが勝ち」みたいな議論に振り回されないこと。
ぶっちゃけ実際に動かしてみて問題がないなら、なんであれそのやり方は正しい。
0140名前は開発中のものです。
2008/11/26(水) 00:21:42ID:wcFZ5Gxi> ID:K7xBu4Cw、ID:gOWsGtVr
>>123の時点では↑この人の諸元と過去発言を把握できなかったがサンプル数が増えたおかげで大凡のところ見当が付いたわ。
まず俺の一連の書き込み( ID:mdtDWXyh、ID:U55fYg17、Xvygn8lQ )から「タスクシステム=FSM」という解釈に至るのは難しい(※)
@FSMの意味をよく理解していないA人の話をよく聞いてないかB意図的に歪曲して解釈しようと努めている、のどれかだろう。
@ならFSMや有限状態機械でググレとしか言えんしAならちゃんと読んでくださいとしか言えんしBなら正直相手にしたくない
奇遇にも過去にこの人物と同じ解釈「タスクシステム=FSM」を披露したのはルサンチマン君のID:SCRh4oL7ただ一人だ。
ID:K7xBu4Cw 、ID:gOWsGtVrがこれと同一人物なのか知る由も無いが、かなり似通った特徴的な思考・読解の持ち主だなとは思う。
さて、この人は更に>>130で「>>128 が、>>123だとして」という謎めいた仮定を持ち出してるのだが、なんでこうなるんだろうね…
俺の過去発言と照らし合わせれば無理があると容易に分かるはずだよな
この人は>>130で自らそれを説明してみせているにも関わらず、その仮定が真であるという前提のコメントを書くだけで
その仮定が偽であるという(当然あってしかるべき、より可能性の高い)前提のコメントは結局書くことはなかった。妙だね
・ただ単にコミュニケーション能力の不足、悪意のない、無知、短気、舌足らずゆえにこういう尻切れトンボで終わった
・「>>128 =>>123であってほしい。いやむしろそうあってくれ。頼む。これで終いにしよう」という願望の現われ
まぁ後者ならそのご期待には添えないとしか言えない
俺は配列に「さん」付けしてもらうことも、ましてや便所のラクガキにおいて初心者(?)に謝ってもらうことにも興味がない
0141名前は開発中のものです。
2008/11/26(水) 00:23:32ID:wcFZ5Gxiとしてまず初めに思い浮かぶものといえばシーン(オブジェクト)やエンティティだろう。そういったもの⊂FSMと解釈するならわかる
#>>2そのものをFSMとして説明することはできるが、これを言い出したらプログラムも電子計算機も社会基盤も自然環境も惑星も
#銀河も宇宙もFSMモデルで説明できるという話になる。ぬるま湯に溶かしたハナクソを構成する分子の振る舞いも、乾いて風化した
#ハナクソ粉体の振る舞いもFSMモデルで滔々と説明できるという話になる。こういう話は埒外であり、するつもりはない
0142名前は開発中のものです。
2008/11/26(水) 01:14:00ID:bxsuU9Ti0143名前は開発中のものです。
2008/11/26(水) 02:19:03ID:RbP/LZbz>>2=「ジョブコン」=FSMという話は直感的で分かりやすいと思うぞ
てか名称「タスクシステム」は人によって定義が違うから使うな。議論が混乱する
0144名前は開発中のものです。
2008/11/26(水) 02:34:19ID:RbP/LZbz>>140はFSMって言い方が抽象的すぎるっつってんのね?
了解。もう言わん
0145名前は開発中のものです。
2008/11/26(水) 08:30:23ID:P2jaFZy4冗談だろって思って配列にしたら速くなった
たぶんキャッシュ周りも関係してる気もする
0146130
2008/11/26(水) 23:22:37ID:QqsnFsqJ>@FSMの意味をよく理解していないA人の話をよく聞いてないかB意図的に歪曲して解釈しようと努めている、
どれもそれなりにあてはまるとは思うが、あえていうならAかなw
とりあえずBについてはそういう意図も一部あったんでそれは謝っとくよ。
ただ、前提として >>40,>>41で繰り返された
>ここでタスクシステムすげぇすげぇ言ってる
というような傾向は無いとはいわんけど(タスクシステムスレだし)、実装で苦労してるみたいな話が中心で、
mdtDWXyhが挑発的な言辞を繰り返さなきゃいかんほどかね?と思うけどな。
0147130
2008/11/26(水) 23:23:39ID:QqsnFsqJこれは順番が違う。同じレスを指してると思うんだけど、
(1)「タスクシステム=FSMだ」という発言があった。
(2) そのあとに >>41で「原始的なFSMモデルのジョブ制御」という発言があった
ので、同一人物か同じ立場の人間が批判的な意味で FSMという単語を使ってるのかな?と思ったんだよ。意味合いは違うようだけどFSMという用語を使うレス自体が少なかったからそこは勘弁。
その上で、ゲーム上のオブジェクトの振る舞いをFSMモデルで捉えることはできるだろうけど、それは配列で構成されたゲームについても言えることで、タスクシステム(実装)批判につなげるのはおかしいんじゃないの?と皮肉ったつもりだったのよ。
0148130
2008/11/26(水) 23:28:25ID:QqsnFsqJか、そういう流れになってくれると嬉しいんで、「これで終わりにしてほしい」という
のも正直なところ。だからピンダッシュに反応しすぎた俺も悪い。もうだまっとく。
0149名前は開発中のものです。
2008/11/26(水) 23:53:44ID:wcFZ5Gxi実際の処理速度を語るとき、ランダムアクセスといったら、メモリアドレスを基準にしたランダムアクセスという話も当然絡んでくる
データ構造上の順番(連結リストなら繋がれた順番)を基準にしたらリニアアクセスだよ、といってもメモリアドレスを基準にしたら
ばっちりランダムアクセスになっていました、という状況も当然あり、この場合は処理する要素数と要素サイズと実装対象によっては
べらぼうなペナルティを受けたりする。ので
>>リストは単純に舐めるだけでも遅い
>誤り。「単純に舐める」=シーケンシャルアクセスに有意差はない。
これは状況ごとにプロファイラなりアナライザにかけて検証してみないと分からないというツマラナイ結論に帰結する
ので
>とにかく、初学者は「どっちが勝ち」みたいな議論に振り回されないこと。
>ぶっちゃけ実際に動かしてみて問題がないなら、なんであれそのやり方は正しい。
だよな
(続く)
0150名前は開発中のものです。
2008/11/26(水) 23:55:50ID:wcFZ5Gxiただし、連結リストを>>2のように使う場合と、ジョブの種類別に配列でデータを固めてる場合(※)を比較すると、前者は不利な状況に追い込まれる
>>2は何でもかんでもごった煮の連結リストでおまけに各要素は好き勝手にジョブを指定してくる。プライオリティ(?)とかいう変数を何に使うのか
知らないがこれでソートされてようが各要素で毎度毎度サブルーチンのアドレス(関数ポインタ)経由でジョブを実行させている
つまりハードウェアにとっては要素ごとに何のジョブを実行するのか予測が難しい。どのジョブが実行されるにせよ、その内容が大して代わり映え
のない超単純な数値積分であれば、分岐予測で速度を稼ぐハードウェアにとっては嫌がらせに近い仕掛けであり、ブチ切れる可能性が高い
○万のパーティクル(数千の通常弾に数千の煙に数千の閃光に数千のフラグメント)を撒き散らす物量ゲーとかなら、そういう要素には
>>2ではなくジョブの種類別に配列でデータを固めて一括処理するほうが速度が出やすくなる。
趣味プログラマであれば、今様のゲーマー仕様PCで実験してみればすぐに確認できる
(※)この手の配列厨コードは、Zソートを回避するあるいはCPUによるZソートを回避する色んな工夫とセットになる。
単純な加算合成だけでなく、アルファブレンドなしアルファテストのみテクスチャに描いてグレア処理して合成とか色々
0151名前は開発中のものです。
2008/11/27(木) 00:37:08ID:q61URdTyその辺は面白い、つか考えてなかったな。
以前、ビデオキャプチャしたYUY2をP4-2.4GHzでソフトRGB変換する、ってのをやってて、
30万ピクセルをfloat演算して1フレーム8msec.程度でで処理できてたから、いまさら数万の
オーダーでがたがたいうなよって思ってたけど、言われてみれば配列のシーケンシャル
処理に近いんで、キャッシュの効かなそうな処理なら、どのくらいで処理してるのか確
認すべきだな。
0152名前は開発中のものです。
2008/11/27(木) 00:57:00ID:q61URdTyこれはメリットというより必要悪に近いんじゃないかな。ゲーム上のオブジェクトを
動的に生成するタイプのタスクシステムだと、処理順が不定になってしまうので、
プライオリティという形で処理順を明示できるようにしてある、みたいな。
そこまでして処理順を確定しないといけないような場面があるのかどうかは
ちょっとわからん。初心者なもんで。
0153名前は開発中のものです。
2008/11/27(木) 05:33:57ID:d1RPtk1Q壁当たりの判定を保持するような物体の当たりチェックは
普通の物体のチェックより後にやらないと
簡単にすり抜けが発生してしまう
俺、当たりのチェックだけはタスクシステム使ってようが
直書きしたほうが安全な気がする
0154名前は開発中のものです。
2008/11/27(木) 06:07:57ID:qLIfWPBBリストに連結されたタスクの中身が何なのかを示すために使われてる。
例えばここだな。
http://web.archive.org/web/20041012012504/www.hh.iij4u.or.jp/~peto/Games/task_03.html
>あらかじめ、優先度とタスクワークの構成を決めておきます。優先度は、例えば次のようになります。
> * 0x1000: ジョイスティックの入力解析
> * 0x2000: 自機の制御
> * 0x3000〜0x3fff: 敵の制御
> * 0x4000〜0x4fff: 背景の制御
> * 0x5000: キャラクタ表示
一つのリストに纏めようとするからプライオリティなんてものが必要になる。
必要悪どころかはっきり悪だと言ってあげるよ。
この仕様だとタスクを増やすたびに追加すべき位置をサーチしなければならない。
またタスクの中身を知るために優先度を確認していかなければならない。
enemyはenemyリストに、backgroundはbackgroundリストに入れりゃいいんだよ。
別に配列でもいいが。
0155名前は開発中のものです。
2008/12/01(月) 12:21:06ID:+Gl5Bh4Tフリーで湯沢と言うビデオカメラマン(元アートハウスゴン社員)から陰部に指を挿入されたことが原因だ!。
当時現役だった彼女にはショックな出来事で事務所とメーカー巻き込んで大騒ぎ。
カメラマンは土下座しただけで金銭は請求されなかったのは何故か疑問だったが…。
(意外と優しい事務所だったりして…。)
普通は事務所から脅され賠償金を請求され業界追放に追いこまれるだろう!
ちなみにセクハラ事件でカメラマンの追放まで追い込んだ領家ゆあの前事務所とは雲泥の差だ。
また普段から公私混同するカメラマンとして有名だし次回彼の標的になる10代のアイドルが気になるところだ。
0156名前は開発中のものです。
2008/12/01(月) 13:32:33ID:zCQmgzIM>タスクシステムについて触れられてない、とか書かれているのを見つけた。
>何それ?おいしいの?直感的でない、変に抽象化されてデバグしにくい、実行順がコードの形で書かれておらずメンテしにくい、
>等々、どう考えてもあれが有効な場面があるとは思えない。使っている人を問いつめたことがあるが、結局利点は出てこなかった。
>一つ考えられるとすれば、独立性をきちんと保って各タスクを書いていればマルチスレッド対応がしやすそう、ということくらいか。
>しかし、どうせ複数タスクから同一のクラスインスタンスを参照してたり、妙なシングルトンやらグローバル変数を見てたり、
>依存関係が不適切なためにスケジューリングが複雑化したりするに違いなく、本当にマルチスレッド実行していい状態にあることを保障するのは容易ではない。
>よほど訓練されたチームでなければそんなことをする気にはまるでならない。
0157名前は開発中のものです。
2008/12/01(月) 19:17:54ID:JLnsfkv1ここの信者だけだよ威勢がいいのw
だって現場で聞いたことないもんw
0158名前は開発中のものです。
2008/12/01(月) 21:32:13ID:igKS/Zf40159名前は開発中のものです。
2008/12/01(月) 22:17:35ID:JLnsfkv1そしたら下請けに流れてきてもおかしくないじゃん
0160名前は開発中のものです。
2008/12/01(月) 23:06:38ID:/JTH9VCPもちろん>>2そのままじゃなかったが、ネットでよく聞くから増えてんじゃね
つーかさー、NDSのサンプルよく読んでみろよ・・・
現場で見たことないって騒いでるやつはDS開発やったことないのか?
0161名前は開発中のものです。
2008/12/02(火) 01:05:14ID:68pyN8gN0162名前は開発中のものです。
2008/12/02(火) 08:48:36ID:2eboyQhG0163名前は開発中のものです。
2008/12/02(火) 17:21:35ID:2m2wCEKnひらしょ氏、今日の日記でも検討してるな。
いずれにしても銀の弾丸じゃないのは当然として、鉛の弾丸かどうかは微妙なところか。
否定派のつもりはないけどね俺。
0164名前は開発中のものです。
2008/12/02(火) 19:37:52ID:RctAWrR8いいなこの人
説明に難しい言葉を使わないようにしてるし
ちゃんと人に伝えようという文章に好感が持てる
0165名前は開発中のものです。
2008/12/02(火) 20:12:02ID:VDtsWa1yタスクシステムとは可搬性と再利用性に優れた素晴らしいシステムなんです
とか繰り返してた人たちの話よりよっぽど分かりやすい
0166名前は開発中のものです。
2008/12/03(水) 02:05:13ID:lPaxGufdつか、ヒープのフラグメント避けるためにサイズの違うデータでも固定長メモリ確保するとか
俺が学生時代にごくナチュラルに作ったものだが・・・。メモリプールという言葉の存在すら知らないまま。
まずさ、ゲームで使われている技術なんて、3Dやら除けば全然大したことがなくて
独自性などどこにもなということを認識するべきじゃなかろうか。とりわけ今となっては。
> だからタスクシステムなんて聞くのは2chだけだって
昔のアマゲ周辺でそれなりに聞いたかな。某よっしん氏等も使ってた記憶が。
ただ、言葉は聞くけど実体は人それぞれという類のものだよね。
オブジェクトをリストで繋げて更新ルーチンへのポインタ保持してるだけで
俺がガンダムだって言っても、言葉の定義なんかないんだから自由なわけだしさ。
実際、昔言ってたタスクシステムもその程度の代物でしかなかったと思うんだよ。
そうだな、それでも、C++がまだ使われていなかった頃はそれなりに画期的、というのもちげーな
「ああこうすればいいのか」と人を感心させられる程度のものではあったかもしれない。
ひとつのテクニックとして名前をつけて呼ぶ価値があったと思うよ。10年以上前の話。
でも、今となってはこんな普通にC++で書けば自然にできるようなことをシステムなんてとても呼べないし、
それでもタスクシステムという名前にこだわってる人は、もっと高度な何かを語ってると思うんだが
何それ?っていうか、要らんよねぶっちゃけというか、コード見せれ、というか
俺としては、C・アセンブラ時代に言ってたタスクシステムが、ものすごいタイムラグを経て、
一部のアマチュアに、おかしな形で伝わってしまっただけじゃね?と思っているのだが。
もしそうだとすれば、素人を混乱させる有害情報でしかないので火消しが必要なレベルだと思う。
そうでないなら、とにかくコード見せて。
0167名前は開発中のものです。
2008/12/03(水) 02:14:33ID:Smp60beThttp://pc11.2ch.net/test/read.cgi/gamedev/1036512390/860-862
0168名前は開発中のものです。
2008/12/03(水) 03:28:15ID:uVk3FrZqLGPLを含むEXEがLGPLに感染してるなんてライセンス文読めば一目瞭然のことを
何とか超解釈で否定しようとしてる子が定期的に出没していて
その理屈は違くね?という人達が理詰めで外堀から確実に徐々に埋め立ててる
そんな感じ?
物事をひん曲げて解釈したがる人を諭すには
駄目押し気味でもああいうのも有効かなとはおもた
0169名前は開発中のものです。
2008/12/03(水) 11:42:42ID:YzqEx1FOあのスレのレスは三行でまとめて欲しい
>>168
あのスレごちゃごちゃしすぎてて、自分で何書いたかさえ忘れる
ところで、感染しないライセンスなんて無いよ。例えパブリックドメインであっても。
結合したら二次著作物なんだから。
0170名前は開発中のものです。
2008/12/03(水) 12:08:41ID:1jatayxx二次利用に縛りをかけないライセンスは存在する。
ていうか、パブリックドメインとは、だれのものでもない存在だから、
二次著作物とかそういう縛りもない、はず。
0171名前は開発中のものです。
2008/12/03(水) 12:59:17ID:YzqEx1FOうーん、有名どころで二次利用に縛りをかけないライセンスを見たことないけどな。
少なくとも「本ライセンス文書を同封しろ」と書いてある。
パブリックドメインに関しては著作権者が権利放棄してるから、利用に縛りはないだろうけど。
0172名前は開発中のものです。
2008/12/03(水) 13:23:37ID:6uS+aRN8おまえらあっちのスレでやれ。
>>168
むしろ逆効果にしか見えないのだが、
前スレで釣り宣言してたからそれで狙い通りなのだろう。
0173名前は開発中のものです。
2008/12/03(水) 13:25:50ID:ls+0FiDV0174名前は開発中のものです。
2008/12/04(木) 00:21:20ID:J8DrEDupint _tmain(int argc, _TCHAR* argv[]){
boost::shared_ptr<GAMEENV> gameenv(new GAMEENV); //D3D,SOUND,INPUT,USERDATA,etc
boost::scoped_ptr<SCENE> logo(new LOGO(gameenv)); //ロゴ画面
boost::scoped_ptr<SCENE> demo(new DEMO(gameenv)); //デモ画面
boost::scoped_ptr<SCENE> title(new TITLE(gameenv)); //タイトル画面
boost::scoped_ptr<SCENE> config(new CONFIG(gameenv)); //コンフィグ画面
boost::scoped_ptr<SCENE> stage1(new STAGE1(gameenv)); //ステージ1
(…中略…)
boost::scoped_ptr<SCENE> stage8(new STAGE8(gameenv)); //ステージ8
boost::scoped_ptr<SCENE> ending(new ENDING(gameenv)); //エンディング
logo->Run(); //ロゴ画面再生
try{
while(1){
demo->Run(); //デモ画面再生
switch(title->Run()){ //タイトル画面再生
case TITLEOPTIONTYPE_GAMESTART: //ゲームスタート
try{ //STAGEEXCEPTIONTYPE_GAMEOVERという例外を投げるまでゲーム続行
stage1->Run();stage2->Run();stage3->Run();stage4->Run();
stage5->Run();stage6->Run();stage7->Run();stage8->Run();
ending->Run(); //エンディング画面再生
}catch(STAGEEXCEPTIONTYPE){;}break; //GAMEOVER例外投げてきた
case TITLEOPTIONTYPE_CONFIG: //オプション画面再生
config->Run();break;
}
}
}
catch(GAMEEXCEPTIONTYPE){;}catch(...){return EXIT_FAILURE;}//糞ゲーだからやめるらしい
return EXIT_SUCCESS;
}
0175名前は開発中のものです。
2008/12/04(木) 00:28:18ID:J8DrEDup各シーンはいわゆるベタベタの配列厨コード。元HSパーだから仕方ないね
でもメモリもGPUリソースもジャブジャブ使いまくったおかげで
見た目はバリバリのイケイケになったよ。動作も軽快だったよ。自惚れだね
0176名前は開発中のものです。
2008/12/04(木) 02:00:33ID:yi3zavJ4たのむ
なにが言いたいのか最後に書いてくれ
俺が気になるのは、メインループが本当に必要なのかどうかだな
タスクシステムも、それ以外のC++コードでも、なんでメインループ作るん?いらなくね?
普通に書けばいいじゃん(普通ってなによ)
0177名前は開発中のものです。
2008/12/04(木) 02:16:23ID:vVwN1TZ0いずれにせよゲームなんて毎フレームの同じ処理の繰り替えしなんだから
どこぞかにループは存在するのが当たり前だと思うが。
0178名前は開発中のものです。
2008/12/04(木) 02:16:58ID:iyneYGG10179名前は開発中のものです。
2008/12/04(木) 03:27:17ID:yi3zavJ4メインループはどんなプログラムにもあんね
なんかさ、1フレームごとに回るループを作るやり方と
作らないやり方(あちこちでupdateする)について
急に気になって言ってみたんだが
やっぱどっちでもいい気がしてきたからいいや
0180名前は開発中のものです。
2008/12/04(木) 04:04:02ID:BYcsjOhaどこかでスケジューラが回ってるがな
0181名前は開発中のものです。
2008/12/04(木) 10:56:55ID:vVwN1TZ0> 作らないやり方(あちこちでupdateする)について
> 急に気になって言ってみたんだが
それは使ってるフレームワークが裏でループ回してupdate()呼んでるんだろ。
あるいは割り込み駆動の可能性もあるが。
0182名前は開発中のものです。
2008/12/04(木) 22:22:51ID:wPvA+LuT>見た目はバリバリのイケイケ
気になるな。
0183名前は開発中のものです。
2008/12/05(金) 00:50:08ID:Vt/x/8eI>たのむ
>なにが言いたいのか最後に書いてくれ
地域担当の教団勧誘員に>>174を見せると彼の顔はみるみる青ざめ、ついには目を背けてしまいました。
ただごとでない様子を感じ取った私は恐る恐るその訳を尋ねました。すると彼はおずおずと耳元で囁くのです。
「それはいけない。凶兆が見えます。そのようなものを作っていては遠からず仏罰が下るでしょう。南無妙法蓮華」
>>174は彼らの"先生"の教義に反する、知性体として恥ずべきお猿さんコードなのだそうです。私は狼狽してみました。
幼少の砌よりツクラーにしてHSPerである私の深層に眠る劣等感の残滓の存在をESPで見抜いたのか、彼は目を細め
「安心なさい。今からでも間に合う。私共のように三宝( * )に帰依なさい。そうすれば必ず道は開けますよ」
と仏様のような微笑みを湛えながらビール券とこの案内状をくれたのです
0184名前は開発中のものです。
2008/12/05(金) 00:51:18ID:Vt/x/8eI(∀・ *)【三宝】…■松浦本■やね本■逆引き本
┌──────────────────────────────────────────┐
│ 【集会のご案内】 │
│ タスクシステム(>>2)こそ失われた聖杯、伝説の神器、至高のオーパーツ、現代のエクスカリバー |
│ 私どもの教団では、身も心も何もかも唯一無二のリンクリストに捧げることで驚きのTCBがプライ |
| オリティすることをお約束します。奮ってご参加ください |
│ タスクシステム総合スレ part3 |
│ http://pc11.2ch.net/test/read.cgi/gamedev/1226199100/l50 │
| |
| 【社説】反動分子の煽動記事に惑わされてはならない |
| http://diary.imou.to/~AoiMoe/2008.12/early.html#2008.12.02 |
| http://d.hatena.ne.jp/naoya2k/20081201 |
| http://qo.sakuratan.com/2008/07/24/タスクシステムのこと。/ |
| 万物を支配するは唯一無二のリンクリストをおいて他に無く、秩序をもたらすはTCBのプライオリテイのみ。|
| この崇高なる輪廻転生の法を冒涜し踏み躙る邪教徒共はママの愛情が足りなかったに違いない。 .|
| 敬虔なる信徒諸君は彼らの妄言に惑わされることなく修行に励みたまえ。そして最終解脱者となっ.|
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ビール券に弱い僕は誘われるままホイホイとこのスレにやって来たんだね
0185名前は開発中のものです。
2008/12/05(金) 03:20:55ID:JyB7wu71ゲームシステム総合スレに名前変えね?
>>2を使ってる人は皆無なわけだし
0186名前は開発中のものです。
2008/12/05(金) 04:47:21ID:U4VbVISL0187名前は開発中のものです。
2008/12/05(金) 05:37:33ID:lg/+bi94あー、ゲームシステム総合とか間抜けたスレタイいちいち考えなくていいから
既存スレちゃんとあるんで。こっちでは撲殺天使の人もあっちでは普通だから
ゲームにおけるデータ構造・クラス設計・パターン2
http://pc11.2ch.net/test/read.cgi/gamedev/1211544659/l50
既存スレからタスクシステムを隔離するためにこのスレは作られたんで
このスレが誘蛾灯として機能するにはこのスレタイは好都合この上ないんで
悪いけどお前が思ってる以上にそこそこ需要あるんだわ
>>>2を使ってる人は皆無なわけだし
は?お前が憤死しても代わりは幾らでも湧いてくるから心配しなくていいって
0188名前は開発中のものです。
2008/12/05(金) 09:54:30ID:bKzmksBZ0189名前は開発中のものです。
2008/12/06(土) 00:08:37ID:AlgIGpgY何がいいたいかわからん。動的インスタンスリスト巡回アップデートwの具体的なメリットデメリットを指摘すればいいんじゃないか?
ttp://www.issei.org/
そのひらしょ氏の本を手伝ったらしいPGさんのブログ。タスクシステムらしきソースがある。
問い詰めた知人てこのひとかな?
例えば>>174をタスクシステムで書いたとして、単純に比較すればそりゃ
>直感的でない、変に抽象化されてデバグしにくい、実行順がコードの形で書かれておらずメンテしにくい
コードだと思うんだよ。んで、それでも使いたいメリットあるのか?て話だよな。
俺は本職のゲーム屋さんじゃないんで失礼かもしれないが、わかりにくいところもあるけど、
結構融通が利いて便利かもと思ったよ。
ためしにプロトタイプを作ってて、「ここで一発エフェクトが欲しいな」と思ったところで、new してリストにつなぐだけで動くってのはちょっと感心した。
あと、メインループ周りを作ってしまえば、そこをいじらなくても別のゲームが作れるのは
なれれば安心感があるな。
ただ、万人にお勧めできるかつと、それはちょっと難しいかもとは思う。
0190名前は開発中のものです。
2008/12/06(土) 00:15:03ID:+2mVCqZ1>ためしにプロトタイプを作ってて、「ここで一発エフェクトが欲しいな」と思ったところで、new してリストにつなぐだけで動くってのはちょっと感心した。
これホントは動かないのが普通なんだよ
裏でグローバル変数でつながってるからnewするだけで動くように見えるだけ
可能でしょ?そういうの?
本来あるべき手続きを見た目見えなくするもんだから
後で「え?そんなところと関係あるの?」っていう部分がボロボロ出てくる
結果これ以上ないデスマになる
0191名前は開発中のものです。
2008/12/06(土) 00:28:23ID:AlgIGpgYレス早すぎるだろw
>後で「え?そんなところと関係あるの?」っていう部分がボロボロ出てくる
そういう不安は、まあ、あるな。自分が把握していられる範囲ならともかく、
「3日前のコードは他人のコード」な人(俺だ)とか。
>裏でグローバル変数でつながってるから
これ、このスレでよく批判の対象になってるけど、俺が見た範囲では
それぞれ listはprivateにしたり一応保護する工夫をしているように見えるけど
「オブジェクト同士が相互参照できるならグローバルと同じで無意味」ってこと?
0192名前は開発中のものです。
2008/12/06(土) 03:37:13ID:+2mVCqZ1タスクシステム云々ってよりグローバル変数の駄目な理由そのものじゃん
0193issei
2008/12/06(土) 07:28:54ID:wah4ZAkA> タスクシステムらしきソースがある。
どこに?
私は、いまどきのハードウェアならタスクシステムは捨てて、役割ごとに std::list<> なり
配列なり作った方が良いと思ってる。
http://www.issei.org/blog/archives/000225.html
0194名前は開発中のものです。
2008/12/06(土) 11:22:47ID:r2noZKmJ名前欄入れてらっしゃるけど、ご本人様で?
そのエントリによると、新人研修でタスクシステムのようなものを教えてる
ところは実在するわけですかね。
0195名前は開発中のものです。
2008/12/06(土) 12:02:44ID:+2mVCqZ1ひらしょーさんの「なにそれ?」で完全に散ったなw
0196名前は開発中のものです。
2008/12/06(土) 12:40:25ID:r2noZKmJちょうどタスクシステムがはまっていた感はあったな。
CodeZineとか。
0197issei
2008/12/06(土) 19:18:28ID:wah4ZAkA私は新人研修に関わってないので、どういう文脈で紹介されたのかは不明です。
研修中の息抜きで、単なる昔話してたのかも。
0198189
2008/12/06(土) 22:51:20ID:AlgIGpgY釈迦に説法だと思うけど、一応、
・狭義のタスクシステム
>>193のリンクで(ここにあるようなモノ)としているような古典的なもの
・広義のタスクシステム
古典システムをクラスとstd::listなどで実装しなおしたもの
というような定義がこのスレでは何度か上がってて、オブジェクトの種類ごとに
リストを分けるべき、てな議論もあるんで、>>193のサンプルや、ほかに公開している
ものはその範疇かな、と思った。
定義自体あいまいなところがあるので、タスクシステムと呼ばれたくない、
ということであれば申し訳ない。
0199名前は開発中のものです。
2008/12/06(土) 23:09:38ID:vtDZydvRシステムとか名前つけること自体が厨臭くてダメだろ。
0200名前は開発中のものです。
2008/12/06(土) 23:25:08ID:Z3cf8eY80201名前は開発中のものです。
2008/12/06(土) 23:49:37ID:gO9ddo5C命名自体は思考の道具として必須だよ。
りんごを「りんご」と呼べないならそれをどう頭の中で扱うのか?
ただ、付ける名前の好き嫌いと妥当性はあるだろう。
自分の子供に「悪魔」と名づけたら批判される。
まあその程度なんだが。
0202名前は開発中のものです。
2008/12/07(日) 01:28:33ID:DJqT4ev1いまさらどうにもなんないよなぁ
0203名前は開発中のものです。
2008/12/07(日) 02:16:59ID:ubrMdVl3タスクもシステムもOSを意識してしまう用語だからな。
言葉の意味的には >>92 のいう ジョブコン(トローラ)の方がより厳密かなあ。
0204名前は開発中のものです。
2008/12/07(日) 02:54:06ID:0juovOZI0205名前は開発中のものです。
2008/12/07(日) 03:37:41ID:mATZsXLl自分が学ぶ技術に名前や名称がほしかったんだろうな
理由はきっとそっちのほうがたしからしく見えるからかな?
でもそれもひらしょーさんの「なにそれ?」で
タスクシステムは世に通じない名称ということを実証するのに十分だったな
な〜む〜w
ひらしょーさんと同じことを説明してくれてる人はたくさんいたけど
名称の魔力があったから信者はまったく聞き入れなかったよね
0206名前は開発中のものです。
2008/12/07(日) 11:05:38ID:DJqT4ev1信者決め付け脳はウザい。
0207名前は開発中のものです。
2008/12/07(日) 13:20:37ID:kyRfBfLD0208名前は開発中のものです。
2008/12/07(日) 14:00:36ID:So4hgvTQシステムはどうかしらないけど、ゲーム業界でタスクは一般的になってると思うよ。
俺が書いたコードをソフトメーカーの人に見せたら、汎用タスクだねって言ってた。
0209名前は開発中のものです。
2008/12/07(日) 14:40:22ID:DJqT4ev1まぁその記事の「タスク」は、MTフレームワークの用語としての「タスク」だと
思うが。
0210名前は開発中のものです。
2008/12/07(日) 16:34:44ID:So4hgvTQこのスレで言ってるタスクシステムとなにが違うの?
「タスク」はプレーヤー、敵、カメラ(視点)、ライティングなどの同時多発的に発生する
ゲームを進行させる処理そのもののことを指す。
各タスクには、プレーヤータスクの更新処理、描画処理。
敵タスクの更新処理、描画処理といった形で「更新処理」、「描画処理」が存在する。
0211名前は開発中のものです。
2008/12/07(日) 17:02:09ID:mATZsXLlまあ、似たようなもんだろ
0212名前は開発中のものです。
2008/12/07(日) 17:12:29ID:mATZsXLlだってそんなもん作ったわりにそれほど見応えのあるソフト連投してねぇし
0213名前は開発中のものです。
2008/12/07(日) 20:03:21ID:4pqMat4a1.グローバル変数(または静的クラス変数)を多用しがち
2.抽象的すぎる(シーン、入力処理、衝突判定、描画物などを同じ抽象レベルでリスト化できてしまう)
3.2のためにプライオリティ変数のような順序制御機構が別途必要になる
4.3のために処理の流れがコードから読み取りずらくなる(このスレの「FSMが云々」のくだりはこれを指摘している?)
5.配列の方が速い(CPU最適化厨乙wいやマジでがんばれw)
6.ひらしょー先生が批判している(よく知らんけど・・・)
最近の流れだとこんな感じか?
個人的には4が致命的だと思うな
※2は、言い換えると「様々なコードの断片や描画物を、必要に応じて追加・削除できるオブジェクトとして
同じ抽象レベルで扱える」というメリット的な言い方も出来るかも知れん
0214名前は開発中のものです。
2008/12/07(日) 20:56:55ID:hSkKXTzZということはわかった。
0215名前は開発中のものです。
2008/12/07(日) 23:20:58ID:YTdxZCAS変数の参照範囲は必要なだけ広く、そして最小範囲
タスクシステムだからこれが出来ないという理由はない
少なくともリストや配列を使った非タスクシステム比べて
変数の参照範囲を広くとる必要などない
>2.抽象的すぎる(シーン、入力処理、衝突判定、
>描画物などを同じ抽象レベルでリスト化できてしまう)
多態を使ったリスト巡回だと抽象レベルが一つ下がるけど
その為に、例えば後から「エフェクトクラスを追加しよう!」と
思ったときにクラスをさかのぼって親クラスを修正しなければならず
また、その親クラスから分岐した子クラスを編集する必要もある
タスクシステムはクラスでいう型を撤廃して、それをデータに
落とし込んでいるがそのおかげでコード修正の影響範囲を
局所化することに成功している
>3.2のためにプライオリティ変数のような順序制御機構が別途必要になる
ZソートするのだってZ値必要じゃん
順番が必要ならH・・・じゃなかった、値が必要なのは当然
どうしてもプライオリティ変数が嫌ならタスク追加時にソートしとけ
(プライオリティ変数使ってる人って毎フレームソートしてるの?バカなの?)
>4.3のために処理の流れがコードから読み取りずらくなる
>(このスレの「FSMが云々」のくだりはこれを指摘している?)
順序制御機構があるならコードは見やすいだろう
関数ポインタのせいで直感的ではないという指摘ならともかく
0216名前は開発中のものです。
2008/12/07(日) 23:21:29ID:YTdxZCAS確かにタスク巡回(多目に見積もってもせいぜい数十万タスクだろう)を舐める速度が
数倍余計にかかっても今のCPUなら有意な差ではない
当たり判定やグラフィック描画との処理時間の割合が違いすぎる
確かにその通りだ
ただ、実際にどういった処理が行われるのか想像して欲しい
1. 現在のタスクから次のタスクが存在するポインタを参照する
2. 次のタスクをメモリに読み込む
3. 読み込んだタスクからデータを参照する
さて、データを参照したのは何回だろうか
しかも「次のアドレス」ではなく「指定したアドレス」から読み込むことがどれだけ不利なことか・・・・
リストと配列の速度差に関しては、実際にベンチを取った人には説明するまでもないと思う
たしかに実用上は大した差ではない
しかし、CPU時間は余り気味の現代社会においてもメモリ帯域はPS3ですら不足している昨今
リストを使ったプログラミングは複雑さが増しているばかりではなくソースも見づらくなり
その上速度まで低下していてはどうやって弁解する事ができるのか不可解である
>6.ひらしょー先生が批判している(よく知らんけど・・・)
おまえら本買ってないだろ?
どうみてもタスクシステムです
本当にありがとうございました
最初は状態変数で分岐させてるけど、後半はタスクシステムじゃねーか
0217名前は開発中のものです。
2008/12/08(月) 00:01:48ID:62ubqb8Mソースコードの流れる順番に処理が行われていないから読みずらいっつってんの
なんで見やすいって話になるんだよ
あと関数ポインタ/仮想関数/無名関数をアンチパターンとするのには同意しかねる
>おまえら本買ってないだろ?
>どうみてもタスクシステムです
ひらしょーは正直どうでもいいw
0218名前は開発中のものです。
2008/12/08(月) 00:11:25ID:nrC30ZCa>変数の参照範囲は必要なだけ広く、そして最小範囲
>タスクシステムだからこれが出来ないという理由はない
>少なくともリストや配列を使った非タスクシステム比べて
>変数の参照範囲を広くとる必要などない
それってソースコード読む人にどうやって伝えるの?
0219名前は開発中のものです。
2008/12/08(月) 08:47:20ID:3OfRiy2M> 少なくともリストや配列を使った非タスクシステム比べて
> 変数の参照範囲を広くとる必要などない
単一の型・固定長ブロックを使ったタスクシステムだと、依存関係を明示する
ために引数を使えないのが痛い。
Scene -> Map -> Character, Hit
たとえばクラス構造として Scene クラスが Map を包含し (メンバ変数名 Scene::map_)、
Map が Character (Map::character_) と Hit 判定処理 (Map::hit_) を包含してるとする。
これだと
Scene::exec() { map_.exec(*this); }
Map::exec(Scene& scene) {
for (int i = 0; i < character_.size(); ++i) { character_.exec(*this); }
hit_.hitCheck(*this);
}
こんな感じで、Scene <-> Map <-> Character, Hit の相互依存関係を明示できる。
Character から Hit にアクセスする場合は、いちど Hit::exec() から引数経由で
Map を呼び出して、それが Hit を呼び出す。
また、Scene から Map に公開するメンバ関数を制限したい場合には、Scene の
既定クラスとして純粋仮想関数だけ定義したクラスを用意し、それを Map::exec の
引数に渡せば OK。多少回りくどいが、メッセージのパスがシンプルになってコード
見れば一目瞭然になるので、バグは減るし追加処理を入れやすい。
単一型リストにしちゃうと引数型も当然単一になるから、引数で情報を渡すのが
不可能になって、結局グローバルな領域に情報を記録することになる。そうなると
いつ誰が読み書きするかわからないので、予期しないタイミングで予期しない処理を
されて泣くわけだ。
0220名前は開発中のものです。
2008/12/08(月) 08:52:11ID:3OfRiy2M小さなオブジェクトの塊」になる。
このオブジェクトを単一リストに入れることで型システムや変数スコープの利点を捨るか、
あるいは複数のリストに入れることで仕様変更時のソースコードの変更範囲が大きくなる
のを諦めるかというのがトレードオフなんだろうね。
0221名前は開発中のものです。
2008/12/08(月) 12:05:50ID:aJ+u6Y4Cジョブコンの利点は、コルーチンが実現できることだ、ってのは把握してる?
0222名前は開発中のものです。
2008/12/08(月) 12:28:19ID:rbhhFL67そもそもコルーチンじゃないし
信者を装うにも無理がある
0223名前は開発中のものです。
2008/12/08(月) 12:56:45ID:+P2RkRte仕様変更が起こってもソースの変更範囲を小さくできるなんてメリットだとは思わないな。
それができるということは仕様とソースが乖離していること、乖離していくことを示している。
0224名前は開発中のものです。
2008/12/08(月) 13:24:53ID:HU7PRYqb確かに仕様変更の中身に強く依存することなので
一般論としてしまうには無理があるな。
設計によって対応しやすい変更としにくい変更があるだろうから
それらを具体的に考えてみるのもいい。
0225名前は開発中のものです。
2008/12/08(月) 13:40:00ID:96cnGhTJ> 仕様変更が起こってもソースの変更範囲を小さくできるなんてメリットだとは思わないな。
> それができるということは仕様とソースが乖離していること、乖離していくことを示している。
は?
仕様変更が起きた時に、ソースの変更範囲ができる限り小さくて済むように
(1つの仕様変更で変更すべき箇所が1箇所で済むように)実装するのは、
基本中の基本だぞ?
小さな仕様変更でソースのあちこちを変更しなければならないという状態のほうが、
仕様と乖離したソースだということになるはずだが?
0226223
2008/12/08(月) 14:05:31ID:+P2RkRteごめんよ。もちろん1つの仕様変更であちこち変更するのを基準に「小さく」って話を
してるわけじゃないんだ。
ある処理が依存する情報について変更があっても、グローバル変数を使っていれば
関数の引数には変更が現れなかったりする、そういう変更の小ささがメリットだとは思わない
って話。
0227名前は開発中のものです。
2008/12/08(月) 19:17:09ID:nrC30ZCa同意
特にグローバル変数まで使って変更を強引に縮小することにメリットは全く無い
0228名前は開発中のものです。
2008/12/08(月) 21:47:43ID:3OfRiy2Mstruct 使っていれば、わざわざ setter, getter を使う必要がない
……それが通じるのは、アドレス空間 64KB の世界までだよな。
■ このスレッドは過去ログ倉庫に格納されています