- タスクシステム
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( 敵 ); } こうした方が良い。
|