タスクシステム総合スレ part3
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/11/09(日) 11:51:40ID:+pjnJyQQpart2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
0869名前は開発中のものです。
2009/01/31(土) 16:52:32ID:9d5EHsE6typedef TaskHandle unsigned int;
struct HashEntry
{
TaskHandle handle;
Task* task_ptr;
};
typedef HashTable HashEntry[max_of_hash_entry];
Taskクラスのコンストラクタでは、TaskHandleとしてincremental IDを付与して
HashTableに登録するコードを書く。Taskクラスのデストラクタでは、HashTable
からremoveするコードを書く。
TaskHandleから具体的な型に変換するのは
template<class TaskClass>
TaskClass* TaskHandleToPtr(TaskHandle h)
{
Task* p = HashTableからhのTaskを取得();
if (typeid(p)!=typeid(TaskClassのインスタンス))
return null;
return (TaskClass*)p; // このcastは安全
}
こうなるな。
0870名前は開発中のものです。
2009/01/31(土) 16:56:11ID:9d5EHsE6TaskHandle enemy1;
TaskHandle enemy2;
に対して
EnemyTask* enemyTask1 = TashHandleToPtr<EnemyTask>(enemy1);
EnemyTask* enemyTask2 = TashHandleToPtr<EnemyTask>(enemy2);
if (enemyTask1!=null && enemyTask2!=null)
{
// これらのタスクは生存している
update_something(enemyTask1,enemyTask2);
}
という生存チェックが必要になるな。仕方ないと言えば仕方ないが、
使う前に必ず必要なのがちょっとうざい気はする。
■ このスレッドは過去ログ倉庫に格納されています