ゲームプログラミング相談室【Part6】
■ このスレッドは過去ログ倉庫に格納されています
0889名前は開発中のものです。
2006/03/01(水) 07:51:41ID:LeN+sImJ関数に分けて、特定の状態のときに行う処理がかけることかな。
状態遷移が複雑だったり外部の環境の変化によって遷移の仕方が大きく変わるようなら
Fiberつかったほーがいいけど、適材適所ということで。
キャストとかtypedefとか必要ない俺のつくったタスクシステムのきれっぱしを参考にしてくれ
正直つくったはいいがザコキャラがでてきてうろうろしたり弾幕があったりするようなゲームを
つくらなかったので使いどころがなかった。
// タスクの管理者はlist<TaskManagable*>をメンバに持ち、Run()を順番に呼んでいくのだ
class TaskManagable {
public:
virtual void Run() = 0;
};
//タスクになりたいクラスは class MyEntityTickTask : public Task<MyEntityTickTask>
// … とやってMain()を実装する。ChangeTask( hoge ) で自分のメンバ関数 void hoge() へ状態遷移できるよ
//管理者に登録するのはこのMyEntityTickTaskクラスをnewするやつの仕事だ。当然だね(^ー^b
template <typename T> class Task : public TaskManagable {
public:
Task() { ChangeTask(Main); };
void Run() { (((T*)this)->*m_doit)(); }
protected:
virtual void Main() = 0;
void ChangeTask(void (T::*fp)()) { m_doit = fp; }
void (T::*m_doit)();
};
■ このスレッドは過去ログ倉庫に格納されています