- ゲームプログラムなら俺に聞け32©2ch.net
227 :デフォルトの名無しさん[sage]:2015/10/05(月) 00:39:23.49 ID:IBdfcwn9 - >ゲームの状況によって必要な処理って変化すると思うけど、
if文で分岐するか、もしくは共通な処理をまとめて state1_before(); common(); state1_after(); こんな感じではダメなんですかね? って構造化プログラミングの基本ですわね for( auto ptr: effects ){ ptr->task(); } タスクシステムを使わない場合でもこういうコードで明示的に呼び出すと思うのですが このときeffectsが空なら何も実行されないんで 自然と状況に応じてタスクの切り替えができると思うのですが >あとどの順で実行されてるか、どれくらいの時間かかってるかデバッグ表示を作るといい これってタスクシステム特有の問題? 処理時間はプロファイラを使えば分かるのでは
|
- ゲームプログラムなら俺に聞け32©2ch.net
230 :デフォルトの名無しさん[sage]:2015/10/05(月) 00:58:10.50 ID:IBdfcwn9 - ゲームには沢山のオブジェクトが出てくるし、同じクラスのオブジェクトが
複数インスタンス化されたりもするので、どう考えても配列かリストか なんらかの形で管理しなければならないのは明白なので、これは分かるんです、当然です こういうデータ構造としてのゲームプログラミング設計はまずあると思います しかし、これに処理の実行順を管理するタスクシステムを組み込むとなると どうしてよいかわかりません ゲームオブジェクト=タスクとすると後々問題が出てくることは ちょっと考えれば直ぐに分かることなのでこの案は無しだと思います データ構造と制御構造を一緒に考えているからうまくいかないと考えられるので 完全に切り分けて単純に、関数・ラムダ=タスクとすると、今度はタスクのリストを動的に生成して プライオリティーで並べ替えて前から順番に逐次実行していくという 実に地味な展開になり、あまりメリットを感じません なぜならリストの前から順番にタスクを逐次実行していく動作は ソースコードの上から順番にプログラムを逐次実行しているのと本質的にそう変わりない気がするから こういった二元論ではなく、もっと中途半端な観点で設計をしないと タスクシステムは成り立たないように思え、とても難しいです
|
- ゲームプログラムなら俺に聞け32©2ch.net
232 :デフォルトの名無しさん[sage]:2015/10/05(月) 01:05:38.48 ID:IBdfcwn9 - >条件文の嵐になって読みにくくなりそうだが…
ある意味ではですよ、 クラスのインスタンスは大概は複数個生成されることがあり得るので リストか配列かで管理されると思うわけです std::vector<effect*> effects とか このときエフェクトの処理を実行するにはfor文を使うわけですよね エフェクトが一つもなければfor文の中は実行されないし、 エフェクトが有れば適切な処理がなされるわけですよね 普通に書いてもそういうプログラムになるので分岐とかはそんなに意識する必要が ないと思うのでした
|
- ゲームプログラムなら俺に聞け32©2ch.net
233 :デフォルトの名無しさん[sage]:2015/10/05(月) 01:12:53.88 ID:IBdfcwn9 - >>231
むちゃくちゃオブジェクト指向風にタスクシステムを考えると いわゆるアクターとか言われているような ゲームオブジェクト=タスク、といった古典的なものになりますが これは上手く行きようが無いと思うんです update呼び出し一回のワンパスですべての処理が終わるとも限りませんし そうするとupdate2、update3・・・どこまで必要? これに加えてプライオリティーによる処理順管理もあるので 処理順がマトリックスになって非常に煩雑なことになる これは完全に破たんした方法なのでよくないと思うんです こんな方法を考えた人はよほどアレだと思いますね
|
- C#, C♯, C#相談室 Part89 [転載禁止]©2ch.net
83 :デフォルトの名無しさん[sage]:2015/10/05(月) 01:19:30.73 ID:IBdfcwn9 - ニートとか?
|
- ゲームプログラムなら俺に聞け32©2ch.net
235 :デフォルトの名無しさん[sage]:2015/10/05(月) 01:33:48.65 ID:IBdfcwn9 - つまり、大規模になるとタスクシステムでなければ分りにくい、という事ですか?
|
- ゲームプログラムなら俺に聞け32©2ch.net
243 :デフォルトの名無しさん[sage]:2015/10/05(月) 18:29:08.47 ID:IBdfcwn9 - >>237
どうしてそう思うのですか? ゲームオブジェクトが、ただのコンポジションにとどまらず、親子関係を持つのは、 座標なんかのジオメトリーに親子関係を持たせたいからですよね それは分るのですが、今言っている依存関係はそういったものではなくて、処理順番の依存関係なんですが だから所有関係がどうこうも関係ないと思うのですが >タスクシステムの利点はオブジェクト指向の多態そのもの。 タスクシステムを使わなくても、ゲーム以外の一般のアプリも含めて 普通に多態を使っているようですが、そういった方法ではダメなんですか?
|