1 名前:名前は開発中のものです。 mailto:sage [2007/12/04(火) 04:51:53 ID:bGSXJYb0] タスクシステムについての議論、相談、質問、雑談などのスレです 前スレ pc11.2ch.net/test/read.cgi/gamedev/1173708588/
41 名前:名前は開発中のものです。 mailto:sage [2007/12/09(日) 20:38:58 ID:QBlb02fM] 複数のシーンを絡ませて管理する機能が必要なんだから シーン同士を管理するシーンマネージャーを作ればいいだけの話じゃねぇの? シーン間を飛び越えてマップやキャラのデータが存在し続けるんなら キャラやマップはシーンに属さないっていうかシーンが抱えるべき情報ではない つまりシーンの前処理後処理でロードアンロードされないわけだな じゃ、誰がするのかというとさっき用意したシーンマネージャーが管理するわけだ シーン間を接続する役目もシーン間が絡む以上シーンマネージャの仕事だろう シーンクラスの役目は今の情報・状態から自分の表示・実行に必要なデータをシーンマネージャに 返す機能だけになるんじゃね? それをうけてシーンマネージャは複数のシーンを総合的にみて現在必要なデータを搾り出すと シーンマネージャに当たるもんは結構でかくなるぜ これをシーンごとに頑張って管理しようとするとデスマーチ確定
42 名前:名前は開発中のものです。 mailto:sage [2007/12/09(日) 23:12:03 ID:rwPHbHKr] >>23 > 1、ゲームループはシーンごとに別にする つまりタスクシステムだね タスクを入れ替えることで違うシーンに対して別のループを提供できる もしタスクシステムを使わなければシーンの数だけほぼ同じソースを別個に書かなければならない 1箇所ソースを変更するだけでそれらのシーンすべてのループを書き換えることになりメンテナンス性が著しく落ちる > 例えばRPGで移動シーンと戦闘シーンがある場合、 > 移動時は移動ループに入り、戦闘時は戦闘ループに入る。 戦闘タスクと移動タスクを入れ替えるってことだね > お互いにまったく別の処理をするので、 > お互いが見えない方がソースを簡潔に書ける。 そう、タスクシステムではタスク単位で完結するから独立性が高い記述が可能になる > 2、ゲームループにはウィンドウメッセージループ(GetMessage)を使う CPU使用率を稼げるし、仮に必要になっても多少のループならタイマーで十分だよね > タイトル画面など自動的な処理する必要がない時は > ループを回さないでCPU率を軽くする。 タスクシステムを使えばシーンごとにまったく違う処理が書けるから シーンごとに違うメインループを書くことも可能なんだよね 仮にオープニングでアニメーションやデモを追加したい場合 タスクを入れ替えることで対応可能
43 名前:名前は開発中のものです。 mailto:sage [2007/12/09(日) 23:19:22 ID:rwPHbHKr] >>24 タスクシステムを使えばそれらは一箇所に記述するだけでいい 重複した記述を最小限にできるタスクシステムはデバッグにも役立つ >>27 限りなく正解に近い タスクシステムとはコールバック進化系の一種だ コールバックされる関数を制御する仕組みが追加されたものがタスクシステムなのだ
44 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 00:12:04 ID:kVa9UCh4] 何が「限りなく正解に近い」だ、このおっぱい占い野郎 「コールバック進化系」とか無駄にESP値を要求する造語を散りばめんな コールバック=何かをきっかけに呼び出される それだけだ。これの進化系ってどういうことだ。具体的に何に対して何が進化したんだ
45 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 00:17:12 ID:FgTvF4nS] また面白い燃料が投下されたようですね
46 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 01:07:39 ID:AFViqWGu] > > 1、ゲームループはシーンごとに別にする > つまりタスクシステムだね この時点で釣りとしか思えない。
47 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 08:12:39 ID:oZKWD7tz] 店なんか床に商品並べて店番一人置いておけばループ分けなど不要
48 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 11:26:27 ID:4KeM6Lnp] シーンって何よ? 言葉の定義なくして話進められても??だぜ
49 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 13:37:22 ID:NNHyQgcJ] また定義厨か さすがにそれはないな
50 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 16:08:36 ID:FhEMVCWa] >>48 さてはDirect3D使ったこと無いな?
51 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 17:15:59 ID:TRJA29h8] >>48 見た感じ ・タイトル画面 ・戦闘画面 ・マップ移動画面 みたいなのをシーンと書いてあるだけ。 >>50 なぜ突然Direct3D・・・ (IDirect3DDeviceN::BeginScene?)
52 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 18:15:58 ID:kVa9UCh4] 定義厨の俺でも さすがに>>48 はないな
53 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 19:32:53 ID:ynLW352R] ゲームをまともに作れないことが明らかな>>48 の発言に、一同、シーンとなった。
54 名前:名前は開発中のものです。 mailto:sage [2007/12/10(月) 19:44:32 ID:sWUDY/qD] プログラム開発現場の駄洒落は99%、発言者が死ねばいいのにという感想になる。 しかもバグの取れない苛立ちまでも一手に引き受けてな。
55 名前:名前は開発中のものです。 mailto:sage [2007/12/11(火) 00:04:17 ID:T0+r8UQD] >>53 誰がシーンとなることを言えと
56 名前:名前は開発中のものです。 mailto:sage [2007/12/11(火) 00:53:40 ID:ECQVp0Tr] さっきからチーンチーンチーンチーンってお前等は変態か?
57 名前:名前は開発中のものです。 mailto:sage [2007/12/11(火) 08:56:37 ID:xDs0NYc0] ユビキタスとかWeb2.0とかあんな感じの電波を感じるな
58 名前:名前は開発中のものです。 mailto:sage [2007/12/15(土) 22:33:07 ID:dW/LIK6y] >>44 説明しよう! >コールバック=何かをきっかけに呼び出される まさにその通りだ!! コールバック関数とは関数ポインタを呼び出し側に登録しておき 適宜呼び出される方式だ この方式はタスクシステムにも採用されている タスクヘッダには初期値としてタスクエンド(Cでは大抵NULLだろう)を示すポインタが入っている 図1.タスクヘッダ → タスクエンド ここにタスクを登録していくことで呼び出される関数が増えていく 図2.タスクヘッド → タスク1 → タスク2 → タスクエンド こうして生成されたタスクリストのタスクはタスクループで順番に呼び出されていく 図3.タスクループ ↓ タスクヘッド → タスク1 → タスク2 → タスクエンド 以上のような構造からタスクシステムはコールバック関数であるといえる コールバック関数に比べてタスクシステムを特徴づけているのは次の3点だ 1.呼び出し側と呼び出され側が1対多である 2.呼び出し側は機能を持たない 3.呼び出され側がさらに呼び出され側を登録することができる 以上の特徴により、動的に機能を拡張し、相互に連携することが可能になったのである
59 名前:名前は開発中のものです。 mailto:sage [2007/12/16(日) 00:14:11 ID:tU3FXTu1] >>58 > 以上の特徴により、動的に機能を拡張し、相互に連携することが可能になったのである 単にインスタンスの数が可変なだけで、連携については何も触れてないじゃん。
60 名前:名前は開発中のものです。 mailto:sage [2007/12/16(日) 01:22:25 ID:Uds4tbII] 先頭をheadにするなら末尾はtailにしてくれ 末尾をendにするなら先頭はbeginかstartにしてくれ 俺が言いたいのはそれだけ
61 名前:名前は開発中のものです。 mailto:sage [2007/12/16(日) 01:27:07 ID:tU3FXTu1] >>58 どうでも良いけど > タスクヘッダには初期値としてタスクエンド(Cでは大抵NULLだろう)を示すポインタが入っている 番兵1つ置いた方が、余計な場合分けが減って嬉しくない? BSDで使われてる TAILQ でも、ヘッドは #define TAILQ_HEAD(name, type) \ struct name { \ struct type *tqh_first; /* first element */ \ struct type **tqh_last; /* addr of last next element */ \ } っつー定義だよな。 あと C++ だと昔は std::list<> 好きだったが、最近は std::vector で、フレームの最後に まとめて std::remove_if と std::vector<>::erase 組み合わせて済ませる方向に。
62 名前:名前は開発中のものです。 mailto:sage [2007/12/16(日) 01:50:58 ID:eEobSst5] >>58 タスクシステムが誕生する70年代末期よりも遥か前の 古典的なコンピュータのプログラムで既に同じようなことをやってるだろ。 例えば、割り込み信号にフックするとき、つまり割り込み処理ルーチン (常駐プログラム・サービス)を割り込みベクタテーブルに追加するとき 既存のルーチンがあればそれと数珠繋ぎにするだろ
63 名前:名前は開発中のものです。 mailto:sage [2007/12/16(日) 02:16:17 ID:eEobSst5] 単純で乱暴なやり方をするなら、割り込みベクタテーブルに 既存ルーチンの代わりに自分のアドレスを上書きして 先に自分の処理を呼び出させ、自分の処理が終わったら 既存ルーチンへジャンプさせる。つまり割り込み処理に割り込む。 もう少し紳士的なやり方なら(同じ割り込み信号にフックする) 割り込み処理ルーチン同士で協定を作り 割り込み処理ルーチンのリストを管理するルーチンを用意する。 こうした仕組みは>>58 の言う 1.呼び出し側と呼び出され側が1対多である 2.呼び出し側は機能を持たない 3.呼び出され側がさらに呼び出され側を登録することができる を全て満たしている。 呼び出し側=ハードウェア 呼び出され側=割り込み処理ルーチン ハードウェアは割り込み信号に応じて割り込みベクタテーブルの 当該アドレスに登録されてる割り込み処理ルーチンを呼び出す。 そしてリストに登録された順に次々呼び出される。 割り込み処理ルーチンは処理完了時のリターン命令を 他のルーチンへのジャンプ命令に書き換えることで 子ルーチンの追加が可能
64 名前:名前は開発中のものです。 mailto:sage [2007/12/16(日) 02:18:07 ID:eEobSst5] 紳士的なやり方なら 呼び出し側=割り込み処理ルーチンのリスト管理プログラム、か
65 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 15:54:34 ID:d05xYvvB] 意見は出したくないが文句はつけたい そんな嫌タスク厨の巣窟だというのがわかる流れでしたね 文句つけてる暇があったら、58がかすむくらいの有益情報でも書き込めっての
66 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 16:25:30 ID:fh4AIKkl] またブーメラン芸か
67 名前:名前は開発中のものです。 [2007/12/17(月) 16:43:25 ID:fh4AIKkl] =210.130.51.98 ヘ( `Д)ノ
68 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 21:14:21 ID:PVpDrrvq] コールバック進化系(笑)スィーツ(笑)
69 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 21:26:04 ID:FK63IV8y] 確かにプログラム用語の大半はスイーツ(笑)テイストを感じさせる回りくどい言い回しだな
70 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 23:00:26 ID:ZuWNJ+Fe] つまりタスクシステムは何なわけ? わたしわかりまぁせん
71 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 23:12:00 ID:DxnpSp/c] foreach
72 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 23:52:08 ID:lVhxy2mV] ここはwhile(1);つかfor(;;);かな。最適化されてればどっちも同じだろうが。
73 名前:名前は開発中のものです。 mailto:sage [2007/12/18(火) 20:23:42 ID:RgUcH/0L] 1フレーム毎に(大抵)全てのオブジェクトのupdateメソッドがコールバックされるシステム と考えていいんじゃね?
74 名前:名前は開発中のものです。 mailto:sage [2007/12/18(火) 23:42:42 ID:LovnfmvP] ----------------------------------------------------------- 987 :名前は開発中のものです。:2007/12/03(月) 23:02:28 ID:hqsjjSWF スレのログ見ると、定期的に「タスクシステム=デザインパターン」とか絶叫してる人がいるみたいだが この人たちの言うタスクシステムってどのタスクシステムの話なんだろうね? 【1.タスクシステム=Logician Lordで紹介されているもののことだよ】 ギャラクシアンとその直系に見られる特徴的な実装こそタスクシステムであり その要件を満たさない異形のコードは全て紛い物だ。タスクシステムとか名乗るな 【2.タスクシステム=リスト巡回UPDATE。ていうかforeachだよ。】 ギャラクシアンのそれとは全く別物の、異形のコードであろうとも 俺がタスクシステムって呼べばタスクシステムなんだいバーロー ----------------------------------------------------------- 観察してると、どうもタスク厨って呼ばれてる子は後者が多いような気がしてきた。 何も知らない頭白紙の状態で松浦教祖に洗礼を受けたこの恐るべき子供たちは タスクシステムというフレーズにとても執着してるようだが、厨房神経を刺激する 何かがあるのか? とにかく何が何でもこのタスクシステムという古のローカル用語を俺様理論で 再定義・再構築してやろう、という無駄な努力がヒシヒシと伝わってくるんだが ある意味で(マムコ信者に言わせれば)由緒正しいwローカル用語をわざわざ 掘り起こしてきて流用するのは止めてくれって思う 「朕思うに」「新概念」「新解釈」「オナニー」「再構築」は好きなだけやっていいから なんか別の名前にしろよ。「リスト巡回UPDATE」でも「僕のforeach」でも 「エターナルフォースブリザードシステム」でも何でもいいからさ
75 名前:名前は開発中のものです。 mailto:sage [2007/12/18(火) 23:44:17 ID:m+PO2WK4] 私はもうタスクという言葉自体を使ってない
76 名前:名前は開発中のものです。 mailto:sage [2007/12/19(水) 08:00:04 ID:hUc1dbeP] ゲイは身をタスク。
77 名前:名前は開発中のものです。 mailto:sage [2007/12/19(水) 15:24:26 ID:Ir64JLrB] ○○システムって言い方自体、かなり厨2魂を揺さぶるフレーズだよ
78 名前:名前は開発中のものです。 mailto:sage [2007/12/19(水) 15:25:28 ID:F/n53iWq] じゃあタスクパターンで
79 名前:名前は開発中のものです。 mailto:sage [2007/12/19(水) 20:46:55 ID:UEhDeB5F] >タスクパターン 「ストラテジーパターン?あー、AoEとか大戦略ってパターンだよね」 とか真顔で言ってのけるウィザード級ハッカーの心の琴線に触れる
80 名前:名前は開発中のものです。 mailto:sage [2007/12/19(水) 20:47:44 ID:hUc1dbeP] じゃあ、「タスクモンスターとのアルティメットコラボレーション」で。
81 名前:名前は開発中のものです。 mailto:sage [2007/12/20(木) 07:20:27 ID:c5xOqVc7] >>74 タスクシスステム改め ギャラクシアンロジックかLogician Load Systemでおk
82 名前:名前は開発中のものです。 mailto:sage [2007/12/20(木) 20:44:20 ID:tLt8cR7R] エロスロジック
83 名前:名前は開発中のものです。 mailto:sage [2007/12/21(金) 00:29:57 ID:rVMYRhvV] オナニーシステムで通じると思うんだ リスト巡回オナニーも分かりやすい オナニーforeachは微妙 オナニーパターンはオナテク板で使用済み
84 名前:名前は開発中のものです。 mailto:sage [2007/12/21(金) 00:38:40 ID:Jo2a6K/I] じゃ、タスクシステム関連は、PinkBBSに移動しようか。
85 名前:名前は開発中のものです。 mailto:sage [2007/12/21(金) 01:45:05 ID:sZQMdwXf] 僕の肛門もリスト巡回されそうです
86 名前:名前は開発中のものです。 mailto:sage [2007/12/31(月) 11:54:08 ID:K8WL7pln] どうすればギャラクシアンのソースを見られますか?
87 名前:名前は開発中のものです。 mailto:sage [2007/12/31(月) 15:03:05 ID:73X1rpDN] 逆アセンブルすればそれがほぼソース
88 名前:名前は開発中のものです。 mailto:sage [2007/12/31(月) 18:29:38 ID:K8WL7pln] >>87 ファミコン版でいいですか?
89 名前:名前は開発中のものです。 mailto:sage [2008/01/07(月) 06:40:49 ID:5ateSYSb] タスクシステムこそ ゲーム業界にのみ伝わる現代の魔術 連綿と口伝によってのみ受け継がれ 変化し、進化と退化を繰り返す その亜流は数知れず、もはやその全てを語れるものはいない
90 名前:名前は開発中のものです。 mailto:sage [2008/01/07(月) 14:38:53 ID:GyFmGIbt] 都市伝説テンプレート
91 名前:名前は開発中のものです。 [2008/01/14(月) 14:54:45 ID:qTpR8IwF] つまりはスケジューリングでおk?
92 名前:名前は開発中のものです。 mailto:sage [2008/01/14(月) 15:24:10 ID:qReoD61a] 少なくともスケジューリングは含まれるだろうな
93 名前:名前は開発中のものです。 mailto:sage [2008/03/13(木) 22:58:00 ID:Bu/r75Um] 保守
94 名前:名前は開発中のものです。 [2008/04/03(木) 17:01:08 ID:0WE0DNgq] ゲームプログラミングで分厚い目の本選んだら 著者流タスクシステムの解説が大半で(´・ω・`) ショボーン。
95 名前:名前は開発中のものです。 mailto:sage [2008/04/03(木) 18:08:34 ID:HifUC8Yv] >>94 >>7
96 名前:名前は開発中のものです。 mailto:sage [2008/04/03(木) 18:34:18 ID:0WE0DNgq] 逆引きタスクシステム これだorz
97 名前:名前は開発中のものです。 mailto:sage [2008/04/03(木) 18:37:31 ID:0WE0DNgq] ちょっと違ったな。 買ったのは「逆引きゲームプログラミング」って書いてあるから姉妹本かな。 表紙に堂々とタスクシステムなんて書いてあったらさすがにスルーするしねw
98 名前:名前は開発中のものです。 [2008/04/06(日) 18:50:02 ID:cIcTAloV] Javaはポインタが使えないからイテレータ使うしかないのかな?
99 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 21:07:19 ID:RBp65Y5g] >>98 Java がポインタを使えないのは確かだが、たぶん >>98 はそれ以前の 勘違いをしている。
100 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 21:09:30 ID:ptmozDNb] ねぇぼく、すれたいよめゆ?
101 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 21:24:10 ID:hAyEqcH5] >>98 にタスク厨の素質を感じた お前たち、大事に育てなさい
102 名前:名前は開発中のものです。 mailto:sage [2008/04/07(月) 04:08:41 ID:qDynBUHm] ■星屑きらら杯 ttp://kirara111.sakura.ne.jp/ 主催:111 超絶神星屑きららを迎えての史上最強コンテスト。 優勝賞金はwebマネー3万円ぶん。 今までの常識は通用しない、コードネームは・・・アンタッチャブル。
103 名前:名前は開発中のものです。 mailto:sage [2008/04/07(月) 16:38:25 ID:V2Suu5FZ] ほえ
104 名前:名前は開発中のものです。 mailto:sage [2008/04/20(日) 10:58:52 ID:tFc51Cra] boost::circular_bufferってタスクシステム向きだと思う
105 名前:名前は開発中のものです。 mailto:sage [2008/04/21(月) 20:44:13 ID:RVUuTgSY] どこらへんが向いてると思うの? バッファからあふれた分は上書きされるわけだが・・・
106 名前:名前は開発中のものです。 [2008/05/05(月) 11:03:20 ID:RRXW9Hmv] 結局タスクシステムって良いプログラム??それとも悪いプログラム??
107 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 16:01:08 ID:h5LjEvcu] 普通のプログラム このボケを期待してたんだろうけど若い人はこのネタ知らないよ。 欽どんと欽どこのどっちだったかな。
108 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 16:01:33 ID:/b4BEf3P] 適材適所 なんでもタスクシステムで済まそうとすると苦労する
109 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 18:20:31 ID:mspxDfm7] この絵は良い絵ですか?悪い絵ですか?
110 名前:名前は開発中のものです。 mailto:sage [2008/05/23(金) 05:11:37 ID:urjZe250] もーやだ 普通に逐次処理で書いて並列的な仕事はスレッドっぽい何かでやりたい ゴリゴリとタスクとやらで状態マシン書いていけるお前らはすげーよ 俺は頭悪いから無理。forループ相当のことやるだけでも混乱する
111 名前:名前は開発中のものです。 mailto:sage [2008/05/24(土) 21:14:24 ID:MJp3dmaD] >>110 普通に考えてスレッド同士の関連の処理考えるだけで頭痛いじゃん 分けたからどうだってのよ? 結局 主人公:スレッドNo1 敵A:スレッドNo2 障害物A:スレッドNo3 ってなったら、例えスレッドに分けたとしても 関連時にスレッドNo1xスレッドNo2xスレッドNo3のステータス分の 対応表ができることはかわらんがな 言ってることわかる? つまり、スレッドごとにステータスが3つ(仮に状態○、△、□とする)あったら 敵A○ 敵A△ 敵A□ 主人公○ STA STB STC 主人公△ STC STC STA 主人公□ X X X 敵A○ 敵A△ 敵A□ 障害物○ STA STB STC 障害物△ STC STC STA 障害物□ X X X 主人公x障害物省略 STA ステータスA STB ステータスB X なにもおきない とか必要になるってわかるだろ?
112 名前:名前は開発中のものです。 [2008/05/25(日) 00:58:28 ID:6V9YbMCv] >>111 タスクシステムとやらを使っても 全部処理しなければならないというのは一緒なんだろ ならどっちでもいいじゃないか、状態遷移の話をしているのか?
113 名前:名前は開発中のものです。 [2008/05/25(日) 01:06:31 ID:6V9YbMCv] スレッド使えばこんな感じに書けるはずだが 主人公() { while (true) { if (A) ... ; else if (B) ... ; else if (C) ... ; } yield(); } タスクシステムとやらを使ったときのありえない複雑さは凡人の俺には理解できない 簡単にできるものをわざわざ複雑に書く、天才だけの思考は全く理解できんな
114 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 05:25:51 ID:dDrBARgy] >>111 が何を言いたいのかはよくわからんが、 タスクシステムも>>113 も、複雑さは特に変わらないように思えるけど。 class 主人公 : public Task { void 実行() { if (A) ... ; else if (B) ... ; else if (C) ... ; } }; どの辺が、>>113 に比べて「ありえない複雑さ」なんだ?
115 名前:名前は開発中のものです。 [2008/05/25(日) 05:35:43 ID:5unbeWfm] サブクラスにいちいちIF仕込んでんのかよw
116 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 08:15:02 ID:vQVRM4Hf] >>110 ですが、俺は>>112-113 とは別人です一応 まあ使ってんだけどねタスク。仕事だし >>111 の言うような連携処理は、処理自体の複雑さの問題だと思うんだわ 俺が言ってんのはもっと低レベルな話でー //10フレームかけて10ドット右へ for (int i=0; i<10; ++i) { move_right(1); } とやればいいとこが、 //10フレームかけて10ドット右へ void task_handler() { static int i = 0; if (i >= 10) { go_next_mode(); // 処理が終わったよ! return; } move_right(1); } みたいになるのが長いと言うか分かりづらいと言うか、処理がこみいってくると混乱するなあと。 俺、なんか勘違いしてますかねー?
117 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 08:40:06 ID:vQVRM4Hf] ごめん、ちょっと直した。あとインデント入れた //10フレームかけて10ドット右へ for (int i=0; i<10; ++i) { yield(); move_right(1); } //10フレームかけて10ドット右へ void task_handler() { static int i = 0; if (i++ >= 10) { go_next_mode(); // 処理が終わったよ! return; } move_right(1); }
118 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 09:38:01 ID:xbxgumKd] >>117 前者の方が不自然に感じる俺はどうすれば・・・
119 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 10:39:48 ID:qUO2NAd9] >>113 スレッドの生成/破棄がどれだけ高コストか分かっているのかね? >>117 途中のフレームでやっぱり左に切り返す処理等を入れたら後者の方が 遥かにシンプルになる。
120 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 10:52:41 ID:7UG2hamH] >>112 いや、だから変わらんでしょ?って言いたかったわけよ
121 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 10:57:13 ID:7UG2hamH] あーだから、スレッドなんて作っても 根本の複雑さが問題なんであってタスクシステムなんて してもここは変わらんよと
122 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 11:08:35 ID:K3dp7DqQ] 時間かけて行う処理、広くいうと、ある条件を満たすまで待って次に進むような逐次処理 を書こうとすると>>117 の言うようなストレートに記述をしたくなるのは分かる こういうのをコルーチン(co-routine)っていうんだっけ。 ただ>>119 の後半にあるように条件判断をイテレーションごとに行う必要があるなら、 コルーチンであってもコルーチンっぽくは見えなくなってしまうかもしれない (スレタイにあわせていうなら) たとえば制御系タスクとワーカ系タスクっていうのがあって、 それぞれ記述しやすい方法が違ったりする? 制御系タスク イテレーション(表示フレーム?)ごとに細かい条件判定を行い、大きな分岐がある ワーカ系タスク ↑に比べて単純なループ、条件判定は脱出するかどうか、程度 おれなら、 前者はメッセージディスパッチャっぽく書きたい。 後者はコルーチンっぽく書きたい。 なあ。
123 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 11:56:53 ID:MyJQpRZH] 結局何やっても複雑になるんだからどんな実装してもおk Flashなんかも標準でタスクシステム(笑)のような仕組み持ってるんだけど、 やっぱ処理順序とかインタラクトとかみんな悩んでるお
124 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 14:13:14 ID:7UG2hamH] 作るもん間違ってんじゃねぇの? >>117 みたいな処理ってスクリプトやプログラムで解決しないで フラッシュみたいなタイムライン(?)があるビジュアル的なもんがあったほうがいいんじゃねぇの? んでキャラの状態遷移みたいなもんは遷移図と各ステータスの遷移条件表がないとどうしたってダメだろ? こんな属性の違うもんをいっぺんに解決しようとする手段を探してること自体 問題の切り分けができていないんと違うか? タスクシステムはあくまで全然別な独立処理をわかりやすく書くためだけのもんだろ こいつは上記の2つの問題にはなんの解決策にもなっていねぇ ゲームプログラムが複雑なのはオブジェクト同士の絡みだろ?
125 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 14:17:00 ID:vQVRM4Hf] >>119 あ、そうなのか? あー、そうかも。 >>122 なる。制御系とワーク系って分けると、なんか分かりやすい。 多分俺がストレスを感じるのは、ちょっとした演出、タイトル画面のデモ、プレイ前の説明画面、 そういう目立たないけど手早くたくさん作らないとならない動きをつけるために、 ゲーム時のキャラクター制御と同じくらいがっちり組まされることなんだな。 実際、ゲーム中の制御は最初からがっちり組みにいくんでストレス感じないし、 俺の場合はイベントドリブンで考えた方が組みやすいから確かに>>119 の言う通りかも知れない。 しかし・・・だまされないぞ! イベントドリブンがしたければ別にスレッドでもできるわけで(Windowsで言うPeekMessageね)、 スレッドのコストの問題は(色々と解決方法が考えられるはずなので)ここでは無視して考えてほしいんだけど、 処理によってはタスクと同じ機構をスレッド上に構築することがあったとしても、 それが可能なことは悪いことじゃないと思わない? それはC++がベターCとして使えるように、スレッドがベタータスクとして使えることだとは思わない?
126 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 15:41:32 ID:0NNJH3W1] >>122 コルーチンとかファイバーとか言うね。 少し違うけど継続(continuation)の方が知られてるかな。 スレッドは同時に走ることを期待するからこの点は違う。 そういやゲーム方面でLuaが人気あるらしいけど コルーチンも使ってるのかな。
127 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 15:43:46 ID:dDrBARgy] 我々に必要なスレッドは2つ。 メインスレッド、データ読み込みスレッド、BGM再生スレッド、この3つだ。 スクリプトでタイトル画面実装してコルーチン使う、とかならともかく、 キャラの制御なんかと同じレベルにスレッドぽこぽこ作るのは嫌だなぁ。 つか、どう実装するにしても、 ボタンによる演出スキップとか、時間経過によるデモへの移行とか、 タイトル画面程度のものでも状態遷移は考えなきゃならないと思うけど。 まあ、キャラなんかとは、複雑さは全然違うけどさ。
128 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 15:55:46 ID:7UG2hamH] 何度も言うけどスレッドは状態遷移の複雑さの問題を解決しないよ
129 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 16:03:27 ID:zNY0acjC] マトリクスでも書いて整理しろよ
130 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 16:43:17 ID:vQVRM4Hf] 全レスしたいけどウザがられるしとりあえず >>128 んとですね、夢を語ってるように見えたかも知れないけどもw スレッドがゲームの状態遷移の複雑さを解決すると考えているのではなく、 タイマードリブンないわゆるタスク処理というものは、 本来ローカル変数やプログラムカウンタという言語上の機能を プログラマが自分で状態として(ワーク変数などで)管理しなくてはならないのが 負担だと思いませんかと言いたいのです
131 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 17:01:19 ID:vQVRM4Hf] あ、俺が想定してるスレッドは擬似スレッドです。コルーチン等 OSが用意するプロセス/タスク/スレッドは想定してないです
132 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 17:02:07 ID:7UG2hamH] >>130 もとのレスと比べて全然いってることが違うような希ガス
133 名前:名前は開発中のものです。 [2008/05/25(日) 17:02:23 ID:6V9YbMCv] おれも>>130 と同じ事が聞きたい 話を広げて逃げないでください>天才タスカーの皆さん
134 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 17:15:50 ID:7UG2hamH] >>133 んあ? 考えてることがさっぱりわからん ゲームプログラムで複雑なのは各オブジェクトの状態遷移であって タスクシステム云々は問題じゃねぇから気に入った方法で好きにしろってのが みんなの総意だろ(おそらく) ここまででなんか違うこと言ってるならなんか言ってみ?
135 名前:名前は開発中のものです。 [2008/05/25(日) 17:22:31 ID:6V9YbMCv] >>134 130に対する答えにはなってないな 質問の意味が理解できないのならできるだけわかりやすく解説するが、必要か?
136 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 17:23:16 ID:A+/TQh+q] >あ、俺が想定してるスレッドは擬似スレッドです。コルーチン等 最初から「マイクロスレッド」と言えば無用な混乱を避けられるぞ
137 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 17:23:43 ID:vQVRM4Hf] >>134 ですよねー すんません、でかけてきます
138 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 18:00:32 ID:xbxgumKd] ゲームプログラムからそれを取ったら後は何が残るんだ?
139 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 18:10:01 ID:dDrBARgy] >>113 の if の羅列は状態ごとの処理の振り分けじゃなかったのか。
140 名前:名前は開発中のものです。 [2008/05/25(日) 18:24:49 ID:6V9YbMCv] >>139 状態ごとの処理の振り分けが何を指すのかわからないけど マイクロスレッドと状態遷移のトレードオフとして 例えば信号の状態が「赤、青、黄」の三つだとして 普通に状態遷移を書く場合(Stateパターンではなく) state; // をメンバ変数か、グローバルで if (state == 赤) ... ; else if (state == 青) ... ; else if (state == 黄) ... ; それよりも、スレッドを用いて while (true) { 赤(); sleep(?); 黄(); sleep(?); 青(); sleep(?); } の方が直感的で読みやすいでしょという意味で書いたつもり。
141 名前:名前は開発中のものです。 mailto:sage [2008/05/25(日) 18:38:09 ID:A+/TQh+q] 青→黄→赤と遷移するんだろう? さっそくバグを仕込んでいるじゃないか