- 1 名前:名前は開発中のものです。 mailto:sage [2009/12/13(日) 18:11:06 ID:ESt66YNz]
- タスクシステムについての議論、相談、質問、雑談などのスレです
part8 pc11.2ch.net/test/read.cgi/gamedev/1250678891/ part7 pc11.2ch.net/test/read.cgi/gamedev/1241670786/ part6 pc11.2ch.net/test/read.cgi/gamedev/1238725539/ part5 pc11.2ch.net/test/read.cgi/gamedev/1234977661/ part4 pc11.2ch.net/test/read.cgi/gamedev/1233459490/ part3 pc11.2ch.net/test/read.cgi/gamedev/1226199100/ part2 pc11.2ch.net/test/read.cgi/gamedev/1196711513/ part1 pc11.2ch.net/test/read.cgi/gamedev/1173708588/ ・タスクと呼ばれる実装は、非常に多岐に渡ります 古典タスクシステムについての話題は「>>2」と明示してください そうでない場合はカスタム版であることを明示してください ・人を憎んで言語を憎まず
- 310 名前:名前は開発中のものです。 mailto:sage [2010/01/24(日) 23:59:28 ID:bsBl9MV5]
- >>309
うん「タスクシステム」が技術的な実体を持たないというならそれでいいよ。 でも含みを持たせてみたりしてるしそもそも「実装はそれぞれ」だけじゃなんの話にもならないでしょ。 そういっているだけ。 >こんなところで意地張ってないでゲーム製作にでも打ち込んだほうが >あんたにとっても有意義じゃね? これはそうだけどね。これを突っ込む意図は何?
- 311 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 00:21:13 ID:pmo4H81E]
- >>310
>うん「タスクシステム」が技術的な実体を持たないというならそれでいいよ。 あんたのいう技術的な実態って何のこと? タスクシステム並みにあいまいなんだけど >これはそうだけどね。これを突っ込む意図は何? そうだけどね、と納得したならいいんじゃね?あんまり意地はるな
- 312 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 00:28:55 ID:xzx5WVbG]
- >>311
うーん読み取れないものなのかな >・それ以外の何か(例えばTCBを使って実装されている。動的な処理順番変更機能を持つ。など) これは違うの? >その方法にこだわる必要はないと思う。 ともいっている。これはあいまいなの? >そうだけどね、と納得したならいいんじゃね?あんまり意地はるな この板一応技術板だよ。実体のないものと結論付けるのはそれなりに意味があるでしょう。 それすら否定するならこのスレにレスする君の意図は何と聞きたかったの。
- 313 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 00:35:39 ID:pmo4H81E]
- あんた笑っちゃうほど>>309のまんまだな
人の質問には答えずに質問返し。そしてものすごい意地っ張り…
- 314 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 00:39:40 ID:xzx5WVbG]
- >>313
>>・それ以外の何か(例えばTCBを使って実装されている。動的な処理順番変更機能を持つ。など) >これは違うの? >>その方法にこだわる必要はないと思う。 >ともいっている。これはあいまいなの? これは返答じゃないの? むしろこの返答に答えて欲しいんですが。 質問の意図を確認しながら返答することすら許さないの? >人の質問には答えずに質問返し。 それ俺がそう思っちゃうんだが。
- 315 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 00:40:30 ID:ESuEoHnc]
- >>309
実例を挙げて、具体的に言ってあげたらいいと思うよ。 自分の関わってるプロジェクトを例に挙げて、 こういう要求の時にはこういう処理をタスクシステムと呼んでる っていうのをボカさずに説明してあげるべきだと思う。
- 316 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 01:04:58 ID:pmo4H81E]
- >>314
>これは返答じゃないの? 返答じゃないでしょ。質問でしょ >質問の意図を確認しながら返答することすら許さないの? こっちの質問の答えになってないからね まぁいいや これじゃID:KTZGeiZiと同じ結論のわかってる終わり無き戦いに巻き込まれるだけ なので撤退しますわ 時間は大切にね!
- 317 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 01:08:22 ID:VSiYVhth]
- この機能なんの意味もないってそろそろ認めてもいいと思うw
- 318 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 01:15:12 ID:UpyPZX8b]
- 煽りたいときに意味があるでしょ
>>3は秀逸
- 319 名前:名前は開発中のものです。 mailto:sage [2010/01/25(月) 09:06:17 ID:G4TpJJQM]
- > これじゃID:KTZGeiZiと同じ結論のわかってる終わり無き戦いに巻き込まれるだけ
説明出来ないことを誤魔化すには、その対応は手垢がつき過ぎてる。
- 320 名前:ハード屋 mailto:sage [2010/01/27(水) 21:45:20 ID:1CPLoz/X]
- あーやっぱこういう流れになったか。
なんていうかさ、たとえ、タスクシステムのメリットが出てきたとしても、 「そのメリットに焦点を当てた専用のモジュールを作れば?」 か 「そのメリットが生きる機能に専属でくっつければ?」 で終わっちゃうんだよな。 メモリ管理やオブジェクトの管理をするモジュールがあってもいいとは思うけど、 タスクシステムにくくりつける必要はないし、その方が可搬性が高まる。 Zソートやあたり判定で動的な実行順制御が必要な場合も、 それぞれのモジュールなりエンジンなりにそういう機能を持たせた方が、 これもやっぱり可搬性が高まる。
- 321 名前:名前は開発中のものです。 mailto:sage [2010/01/27(水) 21:57:51 ID:1CPLoz/X]
- 最小構成のタスクシステムって、動的に実行順序を制御できるだけの代物だと思うけど、
でも、動的なスケジューリングをするからには、その目的が絶対あるはずだろ。 だったら、その目的の機能内で動的なスケジューリングを勝手にやればいい話じゃん。 たとえば、Zソートだったら描画エンジン内で勝手にやりゃすむはなしだし。 動的スケジューリングってことは、それだけ ややこしい わけで、 汎用性を持たせようとして表に出してくる必要はないよな。
- 322 名前:名前は開発中のものです。 mailto:sage [2010/01/27(水) 22:12:29 ID:1CPLoz/X]
- あと、開発手法としてタスクシステムはどうのこうのってのも出てたけど、
そういう動的呼び出しに頼ったやりかたは、そりゃプラグインなんかで使う増設の手法だ。 ゲームで言えば、ModだよMod。あとから拡張するやつ。 まだリリース前で最終ビルド前なのにModはねぇだろ。 だって、まだ、メインループ部は触れるわけだろ? 拡張拡張の延長でゲーム作るわけ?めんどくせ。
- 323 名前:名前は開発中のものです。 mailto:sage [2010/01/27(水) 22:18:54 ID:1CPLoz/X]
- プロジェクト管理の面でも、
メインループから明示的に関数なりメソッドなりを呼び出す静的なやり方の方が、 トップダウンで管理しやすいと思うんだがなぁ。
- 324 名前:名前は開発中のものです。 mailto:sage [2010/01/27(水) 23:06:33 ID:8BvS9Ahu]
- 静的のメリットをわかってない奴は多い。違いすらわかってない奴も。
抽象化はメリットがあって初めて必要なもので メリットが小さければ可読性保守性が落ちるだけのことがほとんどということもわかってない奴多い。
- 325 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 01:48:59 ID:ZDsUmlPH]
- >>320
自称ハード屋くんの文章は相変わらず中身がない。批評の対象をきちんと明示していないから。 君が考察し批評している対象物が何なのかきちんと明示してねー、と何度も何度も指摘してるよねぇ。 それはいつ、誰が、誰と、どういう状況で、何を作るために使ったものなんだい?実在するのかい? ハード屋ともあろう者がこの期に及んで「あーあー聞こえない聞こえない」で押し通すはずないよねぇ まさか脳内で生成した何かについてあーだこーだ自問自答してるわけもんねぇ さぁ、さっさと>>107の質問に返答してくれ。な。待ってるんだよ 君は、使ったこともない見たこともない対象物についてあーだこーだ薀蓄垂れる知ったかゲハ厨 ではないと俺は信じてる
- 326 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 02:01:55 ID:+US4i3bi]
- どっちが中身がないのだか。
- 327 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 02:26:16 ID:ZDsUmlPH]
- 前スレで彼の妄想の産物かと疑いたくなる曖昧な批判対象に付き合い
ESPを駆使して可能な限り具体的に書くよう努めてきたので勘弁してね 彼の批判する謎のタスクシステム。それが一体何でどういう状況でどう使われ 何が糞だったのかを彼が書かない限りもう駄目だと思うんだ
- 328 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 02:39:33 ID:3dunImPJ]
- もー書かなくていいよw
だってこのシステム存在価値ないじゃん そろそろ気がつかねーと駄目だろ やっぱ>>3は優秀だな
- 329 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 02:41:16 ID:ZDsUmlPH]
- 例えば5万円未満で買い揃えられるローエンドのPC、例えば
最底辺のAtomネットブック、で60[fps]でヌルヌル動く程度の こういう同人STGをVS2008EE(のC/C++)+DX9で作ったけれど Codezineみたいな組み方って何でここをこういうふうにするかな なんでこうしないのだろうか、とか。これくらい書けるでしょ。普通。 なぜ彼は書けない?おかしいだろ。前スレからの疑問 彼の批判には、具体的なゲームの仕組みの切れ端すら出てこない。 不自然なくらい綺麗さっぱり無い。不思議だよねぇ おやすみ
- 330 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 02:48:34 ID:+US4i3bi]
- >何が糞だったのかを彼が書かない限りもう駄目だと思うんだ
必死さが伝わってきて満足です。
- 331 名前:名前は開発中のものです。 [2010/01/28(木) 03:07:35 ID:wWgILMy0]
- 自称ハード屋は自分が作り出した敵のイメージと戦ってんだよ。
みんなの前でシュッシュッてやってみせてるシャドウボクサーが呟きました 「こいつ使えねー(笑)存在価値なくね?(笑)」 ギャラリーには何が何やら分かりません
- 332 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 06:23:04 ID:3dunImPJ]
- >>331
ごめん さっぱり意味わからない
- 333 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 09:10:52 ID:unwMX8eS]
- >>326
俺もおもったw
- 334 名前:名前は開発中のものです。 [2010/01/28(木) 11:06:32 ID:mX4g322y]
- 手の届かない葡萄は酸っぱいと言い張るしかないアンチの皆さんでした
- 335 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 12:30:42 ID:ycMB9psJ]
- C++でタスクシステム作ってて
・特定の種類(型)のタスクに定数時間でアクセスしたい ・実行順位を定めたい ・タスクの数を制限したい これらの条件を満たすものをファンクタと型消去とリンクリストで実装したら boost::mpl::listにある型リストにタスクに値するファンクタの型を入れて 各々の要素のメモリ領域を再帰継承のtemplateクラス内部で実体化及びリンクリスト生成、 そのクラスが持っているリンクリストを基底型から順に実行する、 という形になったんだけどこれだとファンクタの種類が多くなった場合に 空リンクリストを見て実行せずに制御だけ返すっていう処理も多くなってしまう。 どうすればもっと軽くできるんだろうか。 それとも、この条件を維持しつつだともうこれ以上最適化できない感じ?
- 336 名前:名前は開発中のものです。 mailto:sage [2010/01/28(木) 23:53:28 ID:U4LSFJ0C]
- >>320
> なんていうかさ、たとえ、タスクシステムのメリットが出てきたとしても、 > 「そのメリットに焦点を当てた専用のモジュールを作れば?」 > か > 「そのメリットが生きる機能に専属でくっつければ?」 > で終わっちゃうんだよな。 ところで「タスクシステム」はバズワードなので結局この文章全体が ほとんど意味を成してない。それではあんまりなのでこのバズワードを より適切な言葉で置換して、この文章の価値をよりわかりやすくしよう 僕が考えたエターナルフォースブリザードシステムのメリットが出てきたとしても 「そのメリットに焦点を当てた専用のモジュールを作れば?」 か 「そのメリットが生きる機能に専属でくっつければ?」 で終わっちゃうんだよな。 はは、知るかバーカ、って感じだよね
- 337 名前:名前は開発中のものです。 mailto:sage [2010/01/29(金) 00:18:06 ID:GbohI1Id]
- がんばるねぇ
- 338 名前:名前は開発中のものです。 mailto:sage [2010/01/29(金) 00:46:29 ID:IDSHQgfo]
- ここだけの話、自称ハード屋はタスクシステムの熱狂的なファン
究極のタスクシステムを追い求め、アンチのふりまでして施しを求める まさに乞食 本物のアンチならタスクシステムを否定するのに都合の良い条件を 引っ張り出し、それを前提に話を有利に進めようと試みるだろう
- 339 名前:名前は開発中のものです。 mailto:sage [2010/01/29(金) 00:49:48 ID:BYQonX0j]
- >>335 codepad.org/
- 340 名前:名前は開発中のものです。 mailto:sage [2010/01/29(金) 22:25:19 ID:EIzAmjlc]
- 古典タスクシステムで質問。
弾タスクが地形タスクを知りたい場合、そういう場合どうやって実装すればいいですか? 毎回検索したくないです。
- 341 名前:名前は開発中のものです。 mailto:sage [2010/01/29(金) 22:52:38 ID:H3puqMBg]
- 適当な意見。
地形タクスのアドレス持つとか、継承させとくとかじゃダメなの?
- 342 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 00:10:55 ID:Vw2KSwE+]
- 弾タスクリストと地形タスクリスト別々に作りゃいいんじゃね
- 343 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 01:06:14 ID:+mO4z66u]
- >>341,342
レスありがとうございます。丁度同じような事が前のスレで議論されていたのでそっち先に見てみます。
- 344 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 05:58:16 ID:ACjstz4k]
- >>341
弾タスクは地形タスクがないと存在すら出来ない見事な設計だなw 死ね
- 345 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 06:10:12 ID:7iJlsIJb]
- >>344
地形が無いときは見なければいいんじゃないの?
- 346 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 12:14:19 ID:Zr75YmEa]
- >>340
静的なマップデータを個々にタスクにする必要ないんじゃないか? 移動する足場とか扉とかアイテムみたいなオブジェはタスクでいいけど。 共通のマップ専用処理+その他オブジェの組み合わせが自然だと思う。
- 347 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 19:05:55 ID:ACjstz4k]
- >>345
お前のソース、意味のないヘッダインクルードして癒着が酷いんだな 明らかに無駄なつながりだけどそこになんの疑問ももたずにそういうの ソースに入れちゃうんでしょ? カプセル化とか全然わかってないな
- 348 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 19:18:41 ID:Z5sKkNAh]
- >>346
たしかに必要ないですね。。。 前スレみた感じだとDBみたいなのを作って検索するというのが結論っぽかったです。
- 349 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 19:22:05 ID:HDJNxhu9]
- 裸の王様もここまでくるのか
- 350 名前:名前は開発中のものです。 mailto:sage [2010/01/30(土) 21:11:22 ID:7iJlsIJb]
- >>347
普通は抽象化してるから、独立性が高くなるでしょ? オブジェクト指向の唯一のメリットなんだから。 地形に依存する処理は地形にやらせればいいわけだし 弾はその処理の契機を与えるだけでいいんじゃない?
- 351 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 01:27:02 ID:030VeqOo]
- >>350
は?弾が地形のポインタもつのは設計が狂ってるって話してんのに そんなレス返す辺りお前俺の言ってる意味テキトーにしか理解してないだろ
- 352 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 01:33:59 ID:3AvaezOm]
- まず弾が地形のポインタもつのがいけない理由がわからん
バカな俺に説明してくれ まあ俺だったらグローバルに地形参照してるポインタもしくは地形の変数そのものを置くだろうな そして必要ならリストにも加える
- 353 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 01:48:45 ID:030VeqOo]
- >>352
ああ、君はカプセル化とか気にしない人でしょ? それじゃまったくわからないだろうね そしたら全部グローバルにもったらいいで なにも悪くないよ ただ、カプセル化とかはわかってないよね って言ってるだけ
- 354 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 01:54:01 ID:6qSVPUGq]
- >>351
地形クラスって限定してるならそうなるだろうけど もっと抽象化したものをやりとりするものじゃないの? >>352 グローバルに「地形」と限定したものを持つのはまずいと思う。 宇宙や空には地面は無いかもしれないし。
- 355 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 02:15:08 ID:PJ5c0R9P]
- ポインタがNULLなら判定をスキップとかそんなんじゃ駄目なんだろうか
- 356 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 02:37:55 ID:030VeqOo]
- 逆に考えてみようぜ
地形が弾の情報をほしくなったらどーすんの?
- 357 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 03:11:53 ID:6qSVPUGq]
- お母さんに頼んで弾のポインタをもらう。
- 358 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 03:23:04 ID:Di+guFUQ]
- どっちか一方が知ればいいんじゃねーの
それか第三者が調停するか
- 359 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 03:37:51 ID:98e6KIKR]
- 弾タスクが作られたときに一度、地形タスクのポインタを取得すればいいと思ったんだけど
弾が生きている最中に地形が増えていった場合に対応できないから、 弾が衝突する対象のタスクを入れる専用のリストを設ければいいかな?
- 360 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 04:37:51 ID:Di+guFUQ]
- 俺だったら弾タスクリストも地形タスクリストもグローバルにしちゃうなあ
それやると上の人にカプセル化云々で怒られそうだけど 寧ろグローバルのどこがあかんのですか 大規模集団開発ならともかく、個人の小規模のものなんてグローバルでよくね? どの道どっかで作ってそのポインタなりを一々渡したりするんだろ 一々面倒じゃん
- 361 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 05:24:01 ID:WDNFJ5/J]
- 一週間ぶりに見る自分のコードは他人のコード
- 362 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 05:53:16 ID:CeH4M0fL]
- ここに居る人達はFSMにならないような記述をどうやって行ってる?
あと今まで古典タスクシステム無視してFSMでしかゲームくんでこなかったから 種類ごとの動作順序がバラバラなのが何だか気持ち悪いよ><
- 363 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 05:56:28 ID:98e6KIKR]
- >>362
FSMって有限ステートマシンのこと? >>FSMでしかゲームくんでこなかったから 具体的にどうやって組むのか教えて。初めて聞いたから知りたい。
- 364 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 06:04:26 ID:CeH4M0fL]
- FSMは有限ステートマシンの事だよ。
これでゲームを組むっていうのは、大雑把に例えると 1) タイトル画面を管理するタスクが存在する 2) ゲーム本編を管理するタスクが存在する 3) ゲームオーバーエフェクトを管理するタスクが存在する の時、タイトル画面からはゲーム開始できるから (1)->(2) (2)からはゲームオーバーとゲームリセットが考えられるから (2)->(1), (2)->(3) ゲームオーバーするとタイトルに戻されるから (3)->(1) こんなFSMができあがる。 ゲーム中の敵みたいなオブジェクトも 敵生成エフェクト-> 敵が発生する-> 敵が存在する(行動する事が閉じたFSMとして別に繋がっているが省略)-> 敵が破壊される な単純なFSMとして処理の流れを記述できる。 でも、これは一々タスクを4つ作らないといけないし、無理してタスクひとつに詰め込んでも 状態変数を持ってifやswitchなどで内部で分岐処理をしないといけない。 これは非直感的で避けたい。
- 365 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 06:16:23 ID:CeH4M0fL]
- ごめん。言葉足らずだったね。
今はFSMの代わりにmicrothreadを使おうと調べているんだけど、 これはタスク中でyieldと言われている処理をする事でタスクの実行をプログラムのその行で中断し 次のタスクへ処理が委ねられる。 次回自分のタスクが回ってきた時、即ち次フレームになると yieldの次のステートメントから処理を再開する仕組みっていう解釈でおk? 本質的には割り込みのないmulti threadと同じものだから各microthreadは動作順序が保証されない様に思えるんだけれど どうなんだろう。 勿論動作順序の必要な箇所(描画など)は今までどおりFSMで組むけど、マルチスレッドなんて慣れてないから 「注意しておかないとバグや処理系依存になる」事がありそうで怖い。
- 366 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 11:51:44 ID:HU8XW/cO]
- >>これはタスク中でyieldと言われている処理をする事でタスクの実行をプログラムのその行で中断し
古典的タスクシステムの実装での話しなら yieldで分割される単位で実行関数作って、状態が変わったら登録関数切り替え。 タスクを通して維持される情報はタスクのワークに、が古典的タスクシステムのやり方かと。 ちなみに古典的なリスト形式じゃなくてツリー構造にして子の生存管理を親に任せれば 上で言ってるタイトルとゲームオーバーと、みたいなシーンも君の言うFSMと同じように階層管理できる。 階層タスクはボス戦艦の船体の親タスクと砲台の子タスク、みたいな使い方でもよく使われる。 リストでも同じことできるけど、親の座標が子の座標に影響したり親がやられたら子も全滅、みたいなのは ツリーで作った方が楽。
- 367 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 12:17:25 ID:QrJboi/Q]
- >>364
ここでいうFSMってタイトルの選択とかタイトルローカルの情報はどこで持ってるんだ? グローバル?タイトル関数のstatic変数? メインループから呼ばれて毎フレーム抜けるんだよな 静的に関数コールでくっついてるってことはクラスのメソッドでもないんだよな 仮にクラスのメソッドだとしたらタイトルがゲームとかゲームオーバーとかのクラスを所有するのか? なんか色々タスク方式よりずっと気持ち悪く見えるんだけど。
- 368 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 14:39:09 ID:3AvaezOm]
- >>361
なんで先週の俺こんなに一所懸命カプセルかしてたんだっけ?
- 369 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 14:55:48 ID:CeH4M0fL]
- >>366
なるほどー。 階層構造にしてしまうのもやり易そうですね。 今の機能と共存する形で実装できそうなので作ってみます。 >>367 うう、すみません。表現の仕方が悪かったみたいです。 タスクシステムを普通に作ったらタスクが状態としてFSMで記述され、 遷移がひたすらタスクの生成と破棄する処理として置き換わる事を言っています。 366さんも言っているように、microthread等を使わなければyieldで分割される単位でタスクを作って記述が分断されます。 タスク方式よりずっと気持ち悪く見えても、これはタスクシステムそのものなんです。
- 370 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 15:01:40 ID:CeH4M0fL]
- また誤解を招く表現ですね。
タスクシステムそのものと言っても古典タスクシステムではありません。 実は僕は>>335で、そのレスにあるとおりの機能に依存して今まで開発しておりました・・・。 種類ごとの順序がない、定数時間で同じ種類のタスク全てに対する反復子取得できない、 データ構造がC++風のクラスという型レベルのものではなく処理関数と専用の構造体に分かれている、 汎用ワークエリアの容量が不足している事により起きるバグの回避が自動でできない、 そんな古典タスクシステムからできるだけオーバーヘッドを除きつつ逃げる為にいろいろやっております。
- 371 名前:名前は開発中のものです。 [2010/01/31(日) 15:43:20 ID:PBTWOUVl]
- マイクロスレッド使わなくても、
task::exec() { switch(state) { case TITLE: 条件満たしたらstate=STAGE1; case STAGE1: case STAGE2: } } こんなのでいいんじゃないの?
- 372 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 16:32:55 ID:oiLUSXKA]
- >>371
使わなくても、じゃなく、使わない方が良いだろうね、大概の場合。 FSMでマイクロスレッド使う場合のディメリットは、 FSMのステートをスタックフレームのPCで「代用」するやり方では、 一種類のステートしか保存できない点。だって、PCは一個しかないからな。 だから、マイクロスレッドでFSMやってると、 複数のステートが絡み合うようになる段階で、逆に苦労する。
- 373 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 16:43:00 ID:CeH4M0fL]
- >>372
何か勘違いしているみたいですが、マイクロスレッドはyieldが必要なタスクごとに作られます。 釣りな気もしますがマジレス。
- 374 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 18:17:03 ID:QrJboi/Q]
- >>370
>タスクシステムそのものと言っても古典タスクシステムではありません。 君の頭の中にあるタスクシステムはずいぶん独特みたいだな。 古典的タスクシステムではタスクローカルのデータはタスクワークで持てるけど 今まで作ってたFSMではない静的な方法とやらではどこで持つの?
- 375 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 18:23:01 ID:CeH4M0fL]
- >>374
> 静的に関数コールでくっついてるってことはクラスのメソッドでもないんだよな クラスのメソッドだよ。型消去使ってるから呼び出せる。 codepad.org/OWiGW3X7 C++でタスクシステムするからにはこれくらいやるんではないでしょうか・・・。
- 376 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 18:56:25 ID:QrJboi/Q]
- 何か話が通じない・・・
>クラスのメソッドだよ。型消去使ってるから呼び出せる。 それはC++でタスクシステムつかった時の作り方でしょ。 >あと今まで古典タスクシステム無視してFSMでしかゲームくんでこなかったから 何かしらんが、その非タスクシステムでゲーム作ってたときはシーンローカルのデータは どこで持ってたの?
- 377 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 19:09:56 ID:CeH4M0fL]
- 何だか自分の中だけで議論を展開してしまって申し訳ないです。
> 何かしらんが、その非タスクシステムでゲーム作ってたときはシーンローカルのデータは 古典タスクシステムではないけど上のcodepadにあるtemplate classで タスクをFSMとして扱っているから飽くまでもシーンローカルのデータはタスクとして機能している C++のオブジェクトが持っています。 ここでいう古典とは、型レベルでの事前操作をしないC言語で書く事が可能な種類ごとの順序を保証しない タスクシステムです。 C言語でもある程度のコンパイル時のプログラミングはできるんですがチューリング完全ではないので 高度な事はできず、古典タスクシステムしか組めません。 更に、古典タスクシステムを引き合いに出したのは microthreadでタスクの順序が保証されない事と共通点があったからであって シーン処理に関しての考察は不必要で的外れです。
- 378 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 19:29:56 ID:030VeqOo]
- >>357-358
とりあえず定石として2つのものが互いに参照する可能性がある物体ってのは 正しくインスタンスを配置できたのなら必ず同じ階層に並ぶ つまり、弾が地形のポインタをもつことはできないし 地形が弾のポインタをもつこともできない グローバル変数や関数を使えばこういう設計ミスを回避することができてしまうが これは正しい設計をぶち壊してとりあえずグローバル変数関数に頼るただの突貫工事でしかない 上記の場合は弾と地形の上にいるゲームならシーンクラスとかそういうのが弾と地形のつなぎ処理を 書く部分になるのが正しい >>360 >寧ろグローバルのどこがあかんのですか こういうの一度も考えたことないのが設計語ってる現実ってあるからなぁ 今後のためになんでダメなのかちょっとは考えたほうがいいよ どうしてカプセル化するのか?ってのにその答えがある
- 379 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 19:35:08 ID:WDNFJ5/J]
- グローバルはルール無用になるところが問題だけど、
これを理解して実装しているプログラマーがどのくらいいるだろうか。 グローバルをやたら非難するけどシングルトンをやたらめったら使う奴とかいるし。 あと、ポインタを渡したまま消去されてしまうことに関してなんら対策されてないコードもやたらある。
- 380 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 19:41:42 ID:PBTWOUVl]
- >>378
シーンタスクが毎フレーム、弾タスクと地形タスクの衝突を判定して、衝突したら弾タスクと地形タスクに通知すればいいの?
- 381 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 19:42:47 ID:Di+guFUQ]
- グローバルあかんのやったら何でグローバルが存在すんのよ
別に何でもかんでもグローバルに頼るとは言うてへんやろ 何でもかんでもグローバルあかんと抜かすほうが何も考えてへんのちゃうやろか
- 382 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 19:55:10 ID:WDNFJ5/J]
- >>381
グローバルなくてもコードはかけるよ。 グローバルを隠す(さらには静的変数をなくす)のは主に「状態の整合性」の維持かな。 グローバルはとりあえず実装するのには便利だけど、 そのままおいておくと拡張するときに、 状態の整合性の確認のためコードを何度も確認する必要がでてくる。 普通、他人のコードはもちろん自分のコードも細部まで覚えてないからね。 インターフェイスを減らして意味を持たせることによって確認の手間を減らす意味がある。 そういう意味ではこのメリットがほとんどない場合は グローバルで実装したほうが得ということになる。 また、グローバルを使ってなくても上記のメリットがまったくないコードってのもたくさんある。 やたらメンバ変数の多いクラスとかやたらポインタをすべてにたらい回すとか。 細かく言えばグローバルはオーバーレイでも使わない限りメモリを占有するってのもあるが これはターゲットによってほとんど無視できることもある。
- 383 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 19:56:13 ID:030VeqOo]
- >>381
なんでもかんでもダメだね ただ、君の方針がそうであるなら下手にカプセル化なんてしないほうがいいと思う そういう方針であるならもう割り切るべき 設計なんて頭にいれないでデータすべてをエクセルに展開したみたいにすべて並べるように プログラムを組んだほうがうまくいくと思う
- 384 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 20:00:04 ID:QrJboi/Q]
- >タスク方式よりずっと気持ち悪く見えても、これはタスクシステムそのものなんです。
FSMはタスクシステムじゃないけどタスクシステムそのもの・・・ なんだか禅問答みたいですな。 古典的タスクシステム≠FSM=何かの自己流C++タスクシステム という意味なのかな? >C言語でもある程度のコンパイル時のプログラミングはできるんですがチューリング完全ではないので >高度な事はできず、古典タスクシステムしか組めません。 Cでは古典タスクシステムしか組めないとなる理由=Cがチューリング完全でないから? すいませんがチューリング完全と古典的タスクシステムの関連性が見えません・・・ >microthreadでタスクの順序が保証されない事と共通点があったからであって つまりタスクシステムというより並列処理の話なのかな? 順番の保証が必要な処理ならスレッドでもタスクシステムでも同期するなり 優先付けるなりする必要があるのでは、という話になるが。
- 385 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 20:23:36 ID:PBTWOUVl]
- つーか、現場で働いているゲームプログラマーが実際こうです!って書いてくれたらこんな議論しなくていいのになぁ。
守秘義務ってそうとう厳しいのけ?
- 386 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 20:30:57 ID:SO046r6f]
- コードにしたらボロでるじゃん!
- 387 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 20:38:10 ID:CeH4M0fL]
- > 古典的タスクシステム≠FSM=何かの自己流C++タスクシステム
> という意味なのかな? そうです。 > Cでは古典タスクシステムしか組めないとなる理由=Cがチューリング完全でないから? Cは実行時のプログラミングに関してはチューング完全です。 しかし、コンパイル時ではチューリング完全ではありません。 型に順序を与えたりソートといった動作をするにはチューリング完全である必要があります。 コンパイル時に分かっている情報はその時に処理した方が実行時に処理に負担が掛からず利点があります。 具体的な例を挙げればリストに重複した種類のタスクを単一しか存在できないものとして入れてしまい それをエラーとして扱いたい場合があります。 assertマクロを使えばその様な事態はとりあえず実行時にエラーが出る事によって検出できますが 設置したそのステートメントを実行するまで気付きませんし、動的にタスクに種類の情報を与える方法では 実行前に意図したものが原因か、あるいはロジックの不正でデータが書き換わったのか区別できません。 回避するにはそもそもコンパイルできない様にすればいいのですが、型の区別、重複検索はチューリング完全でなえれば実装できません。 他にも人間のミスを予め阻止する予防線を作る必要があります。(読み取り専用のメモリに対する不正な型変換など) > つまりタスクシステムというより並列処理の話なのかな? OSなどに並列の管理を依存するとゲームプログラム自体が同じ状態でも ゲームが干渉できない部分が原因でタスクの前後関係が狂い、再現性がなくなってしまうのでは?といった 懸念がありました。 並列処理に関しては僕はまだ勉強不足な様です。 再現性があり予測が可能な並列動作やyieldの方法を探してきます。
- 388 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 20:38:40 ID:030VeqOo]
- >>385
前に書いたんだけどなぁ リンクとってないだろうなぁ 質問あるたびに上げるのも面倒臭いし ただ、見て理解できるだろうか? 初心者って設計がどういうものか全くわかってないから void*やグローバルでのアクセスを単純に技だと思っちゃうでしょ? そういう勘違いから卒業してないと意味ないと思うんだよね 俺も駆け出しのころそうだったし インクルードも神ヘッダ(総合ヘッダ)作って全部詰め込んでたよ でもそれは一番やっちゃいけないことなんだよね もちろん方針として割り切ってるならそれはアリ ただ、あるところではカプセル化してあるところではグローバル使いまくりとか するぐらいだったら設計なんて凝らないほうが吉
- 389 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 21:19:15 ID:QrJboi/Q]
- >>387
チューリング完全というよりメタプログラミングのことを言ってるみたいだね。 古典的タスクシステム≠メタプログラミング=君のタスクシステム C++はテンプレートメタプログラミングができるから君のタスクシステムが実装できて Cはそれが無いから君のタスクシステムは実装できない。 ゆえにCは古典的タスクシステムしか実装できない、と・・・ 集合論的に穴がありそうで突っ込みたくなるけど、まぁそこはいいか。 >ゲームが干渉できない部分が原因でタスクの前後関係が狂い、再現性がなくなってしまうのでは?といった >懸念がありました。 やっぱり並列プログラミングの話題っぽいね。 ゲーム系でいえばカプコンの MT Framework あたりならネットでそこそこ情報集められて参考になりそう。
- 390 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 22:28:33 ID:6qSVPUGq]
- >>378
弾が地形に当たったときの処理として 1. 弾が、地形との衝突を判定して自分で消滅する 2. 地形が、弾との衝突を判定して弾を消滅させる 3. お母さんが、弾と地形との衝突を判定して弾を消滅させる のうちどれを使うか決めようぜ! ってこと? 3の場合、お母さんが概念的にグローバルな存在になるけど
- 391 名前:名前は開発中のものです。 mailto:sage [2010/01/31(日) 23:38:16 ID:PJ5c0R9P]
- >>385
実際に使ってるのをうpして社内の人間にバレたら給料に影響する 下手すりゃクビ。そこまでして説明したく無い
- 392 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 00:40:11 ID:1MBMZKlv]
- まぁ自分で書いたコードでも仕事で使ったものなら
会社の知的財産だからねぇ 会社によってはCEDECとか論文とかならいいよ、というのはあるだろうが 匿名掲示板にコードだしていいよという会社はさすがにないだろうね・・・ まぁ今さらタスクシステムをCEDECなりで発表する会社もないとは思うが。
- 393 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 00:51:51 ID:UISeaDQt]
- >>390
ならないよね? まず、ならないってことに同意してもらわないとその先へ進めないよ
- 394 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 00:52:59 ID:hPvV+L+/]
- じゃあ、ここで指摘してくれる人は現場の意見ってことでOK?
- 395 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:00:54 ID:UISeaDQt]
- >>394
そんなの誰も証明できないよね? 頭悪いなら2chやめたほうがいいんじゃない?
- 396 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:20:11 ID:1MBMZKlv]
- >>393
なんだか極端にみえるんだけど・・・ C言語の標準出力とかヒープとかはどう考えてるんだろう。 stdoutとかmallocやnewで取るヒープとかはグローバル扱いからは除外? ANSIで規定されてるからOKとかかな?
- 397 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:24:10 ID:ozNWjQIi]
- >>393
まじで?どうやってお母さんとお話しするの?お手紙?
- 398 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:26:24 ID:hPvV+L+/]
- >>397
全タスクはお母さんを知ってるとか?
- 399 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:28:32 ID:UISeaDQt]
- >>397
ちょっと上のレスすら読まないの? シーンに持たせるって書いたじゃん 馬鹿にレスつけたくないな 話わからないなら入ってくるなっての
- 400 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:33:39 ID:s6RwCqE5]
- 散々アンチをいじり続けて遊んでいた俺が言うのもなんだが
顔も素性も知らん人間にいきなり「タスクシステム作ってテー」「古典タスクシステムでー」 とか言われてもそれは何の理解の補助にも説明の補足にもならんのよな 顔も素性も知らん人間同士ではエターナルフォースブリザードシステムと等価だ
- 401 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:38:54 ID:s6RwCqE5]
- 基本的には、喧嘩の調停はお母さんに任せましょう、で丸く収まる
- 402 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:43:43 ID:ozNWjQIi]
- >>398
そのとおり。 >>399 シーンタスクが持つ設計ってダメじゃね? シーンが切り替わるとき 面クリアしたりワープしたりするときに弾はどうなるの?消えるの? ワープアニメ中に回復アイテム消えたら子供泣くよ?
- 403 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:51:18 ID:s6RwCqE5]
- 泣くよね
- 404 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:52:47 ID:BehLiNNh]
- ゲームタスクが持てばいいのかな
- 405 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 01:57:45 ID:1MBMZKlv]
- 個人的には今現在のマップ情報の各種問い合わせぐらいはグローバル関数なり経由しても許容範囲。
特定のシーンでしか使わないイベント情報とか、そーいうのがグローバルなのは許せんけど・・・ そのゲームの固有のシステム、として一貫性があればグローバルでも悪い設計とは思わん。 特定のゲーム用に作ったゲームオブジェのタスクを別のゲームに使うことなんて・・・ 現実問題、続編作るときぐらいしかありえないし。
- 406 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 02:02:07 ID:UISeaDQt]
- >>402
は?お前の中でシーンがどう定義されてるのか知らないけど シーンの状態の変化レベルの内容で消えられても困る ワープだってシーンの1状態でしかないだろ そしたらワープしても弾消えないよな そもそもお前、会話がおかしい 思い込みが専攻してて他人の話をまともに聞いてない証拠だろ 俺はこの場では弾と地形が存在するクラスをシーンって話の都合上定義しただけで このときはどうする?このときはどうする?って逐一状態を定義したわけではない けどお前はかってに自分の中にあるシーンを俺が言ったシーンだと決め付けて まず、俺にかってに否定意見を押し付けてるけど 正直それはお前が勝手に定義したシーンであって 俺がいったのは弾と地形を包括するもの程度の意味しかもってないんだけど? それに実際ゲーム作るとなったらシーンは単体再生だけで済むようなゲーム少ないし ここでその詳しい仕組みまでもってくることないだろ? 話に関係ないから省いたのに無駄なことするよね君 しかも君の指摘した内容いまの話題に関係あるかね?会社でも君みたいな 話題と全然関係ないこと突然言い出す子がいるけどもっと言動考えてしたらどうなの?小学生じゃないんでしょ?
- 407 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 02:07:22 ID:ozNWjQIi]
- >>406
つまり「シーン」がお母さんね。了解しました。 それなら何の矛盾も齟齬も無いので大丈夫。
- 408 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 02:16:37 ID:UISeaDQt]
- >>407
ほら、また、勝手に決めた 君のお母さんってのはグローバルじゃないの? 違うじゃない?なんで同じっていうの? 違うって なんでそうやって勝手に思い込みで話進めるの?
- 409 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 02:33:20 ID:ozNWjQIi]
- >>408
概念的にグローバルであればよくて、弾や地形がそれぞれ一意の お母さんポインタを持ってるってことで、実装の話ではないですよ。 弾や地形のお母さんにもお母さんがいたって不思議じゃないし。
- 410 名前:名前は開発中のものです。 mailto:sage [2010/02/01(月) 02:34:28 ID:ozNWjQIi]
- あ、説明が足りないかも。ま、いっか
|

|