トップページ > ゲ製作技術 > 2011年09月07日 > 2Lv+in6p

書き込み順位&時間帯一覧

3 位/97 ID中時間01234567891011121314151617181920212223Total
書き込み数4100000000000000000000005



使用した名前一覧書き込んだスレッド一覧
名前は開発中のものです。
タスクシステム

書き込みレス一覧

タスクシステム
104 :名前は開発中のものです。[sage]:2011/09/07(水) 00:11:57.19 ID:2Lv+in6p
実行順のソートが必要ないなら、なおさら動的にタスクリストを持つ必要ないじゃん。
ソースコードにベタでtask1(); task2(); task3()って書いてけよ。
なんども言うけど、ベタで書いたほうが、タスクシステムよりよっぽどシンプルなんだ。
型ごとにリスト用意して、必要に応じてupdateってのは、
名前すら付いていないほど、普通に考えりゃそうなるだろうってやり方。
だから、単純さを武器にタスクシステムを薦めるのは可笑しい。
タスクシステムは、最終ビルド後、製品出荷後で、
後からプログラムを拡張したいときなんかに使われるような、それなりに高度なやり方。
プラグインやMODやドライバなんかで使われる手法。
その必要も無いのに使うものではないんよ。乱用なんよ。コールバックの乱用。
タスクシステム
105 :名前は開発中のものです。[sage]:2011/09/07(水) 00:20:37.44 ID:2Lv+in6p
list<弾*>弾リスト; list<エフェクト*>エフェクトリスト; list<敵*>敵リスト、list<ボス*>ボスリスト;

foreach( 弾リスト ) { update( 弾 ); }
foreach( エフェクトリスト ) { update( エフェクト ); }
foreach( 敵リスト ) { 敵->AI(); }
foreach( ボスリスト ) { ボス->シーケンス(); }

な?簡単だろ?
型情報も殺さないし、引数も自由だ。
タスクシステム
106 :名前は開発中のものです。[sage]:2011/09/07(水) 00:27:04.18 ID:2Lv+in6p
複数処理を型に跨って順不同に呼ぶことだって出来るぜ?

foreach( 敵リスト ) { 前処理( 敵 ); }
foreach( 弾リスト ) { 前処理( 弾 ); }

foreach( 敵リスト ) { 敵->AI(); }
foreach( 弾リスト ) { update( 弾 ); }

foreach( 敵リスト ) { 後処理( 敵 ); }

タスクシステムだと言語本来が持つ制御構造を殺しちゃってるから、
こう言うことが難しい。
タスクシステム
107 :名前は開発中のものです。[sage]:2011/09/07(水) 00:31:43.66 ID:2Lv+in6p
敵->AI();とか書いちゃったけど、実際には
敵->AI( 敵 ); だな。ごめんごめん。

ついでに。
foreachを多重ループにすれば、相互作用の記述も簡単。
タスクシステムですると破綻しかねん処理だ。

foreach( 敵リスト ) //二重ループ
foreach( 弾リスト )
{
  当たり判定とか相互作用的なもの( 弾, 敵 )
}
タスクシステム
109 :名前は開発中のものです。[sage]:2011/09/07(水) 01:02:00.30 ID:2Lv+in6p
一応書いておくと、話題に挙がった、タスク = ゲームオブジェクト なタスクシステムのほかに、
タスク = 純粋な処理 なタスクシステムもある。
一見良さそうだけど、種類の違うタスクを同じコンテナに混ぜ込んじゃうから本質的には何も変わらない。

コンテキストが必要なタスクの場合、
タスクのコンテキスト構造体を作って型ごとにリストで管理。

foreach( タスク1のリスト ){ タスク1の処理( タスク1 ); }
foreach( タスク2のリスト ){ タスク2の処理( タスク2 ); }

コンテキスト不要なタスクの場合、タスク=関数。

foreach( 敵リスト ){ タスク1( 敵 ); }
foreach( 敵リスト ){ タスク2( 敵 ); }

こうした方が良い。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。