ページ 11

C++のタスク処理とシーケンス遷移の実装

Posted: 2013年3月05日(火) 18:14
by BR
質問させていただくのは初めてです、よろしくお願いします。
現在、TNKソフトウェアさんのクラスまみれのゲームプログラミングにてC++での開発を勉強しています。
シューティングゲームの作り方はわかったのですが、その他のジャンルを作るための、シーケンス遷移の実装で迷っています。
タスクシステムを導入しているときのシーケンス遷移では、シーケンス毎にタスクシステム用のリストを用意すれば良い(効率がいい)のでしょうか。
私のタスクシステム、シーケンス遷移の理解度が足りないのかもしれませんが、お願いします。

Re: C++のタスク処理とシーケンス遷移の実装

Posted: 2013年3月05日(火) 22:33
by ISLe
シーケンスをひとつのタスクとして作成すれば良いと思いますが。

Re: C++のタスク処理とシーケンス遷移の実装

Posted: 2013年3月05日(火) 22:45
by softya(ソフト屋)
まず、タスクシステムである事とクラスであることは何の関わりあいも無いと思います。
なので、クラスまみれのゲームプログラミングするとしてもクラスだからタスクにするとか良いとか、クラスでの設計はタスクが至上で万能であると言うことは無いと言うことは理解しておいて下さい。

●参考に過去の議論です。
「使いやすいタスクシステム設計・実装にご協力下さい • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=8414

>タスクシステムを導入しているときのシーケンス遷移では、シーケンス毎にタスクシステム用のリストを用意すれば良い(効率がいい)のでしょうか。

私は部分的には使っても全体的にタスクのような物をゲームプログラミングで使ったことがありません。
なので、誤解や勘違いが有るかもしれませんがゲームとして必要なタスクシステムを考察してみます。

1.処理のタスク
通常のシーケンシャルなタスクにしても弾や敵発生などでタスクには数珠つなぎに増えて行きます。
同時に消滅や順番の変更も往々にして起こりますが、敵処理とかブロックとしてみるとブロック単位での順番は固定できる可能性が高いです。
メニューの処理タスクやら、イベント処理タスクなど通常には存在しないタスクも状況に応じて生成できる必要があります。

2.描画のタスク
描画の場合は、重ね合わせの順番を考慮しなくていけません。
さらに、奥行きなど状況に応じてタスクに順番を変える必要も出てくることを考えないといけません。
その上でメニューやシナリオなど必要に応じで描画タスクが増加する事も考えておく必要があります。

こうやって考えてみると固定した順番の部分はタスクじゃなくて良いんじゃ?と言う疑問がまたまた私に生じてきます。
なので、何時も部分的なタスクの様なものに終始するのです。

Re: C++のタスク処理とシーケンス遷移の実装

Posted: 2013年3月05日(火) 22:57
by katariya
状態(シーケンス)自体にをタスクリスト化して、
例えばゲーム中にポーズシーケンスがあれば、シーケンスタスクリストに追加してあげる。
シーンが終わったらリストから外してあげて、次のシーケンスをリストに繋げてあげる。
という更新機構が出来れば綺麗にいくかと。

この時もともとのタスクシステムが更新と描画を完全に分けておけばかなり楽にできると思います。
各シーケンスにはゲームの更新オブジェクト(プレイヤーとか、敵とか)を登録するタスクリストを基底に持って置いて、派生とかしてみるというのを自分も今試してます。

それで、描画をするためのクラスにそのシーケンスリストを渡しちゃってそれぞれからタスクリストを貰い、一気に描画するという方式です。
これが合っているのか、効率がいいのかは正直分かりませんが1人でやってる分には不具合はないです。

Re: C++のタスク処理とシーケンス遷移の実装

Posted: 2013年3月07日(木) 23:21
by BR
回答ありがとうございます。
返事が遅れてしまい申し訳ありません。

皆様の返信を読ませていただきましたが、現在頭の回転があまりよろしくないので、明日ほどまた書かせていただきます。