これも、真新しいことはありません
作った保管庫クラスとそのオブジェクトクラスを継承して更新処理・描画処理用の仮想関数を追加しただけです
actorobject.h
#pragma once
#include "reservoir.h"
#include "actorobject_type.h"
///////////////////////////////////////////////////////////////
// アクタークラス
class IBaseActorObject:public IBaseReserveObject
{
//public:
// IBaseReserveObject(void);
// virtual ~IBaseReserveObject(void);
// //
// int AddRef(void);
// void Release(void);
//protected:
// virtual bool OnCreate(void* pParam)=0;
// virtual bool OnInitialize(void* pParam)=0;
// virtual bool OnFinalize(void)=0;
// virtual bool OnDestroy(void)=0;
private:
eActorObjectType m_ObjectType;
public:
IBaseActorObject(eActorObjectType ObjectType);
~IBaseActorObject(void);
//
eActorObjectType GetObjectType(void);
public:
public:
};
// 一括Update/Draw機能を追加
template <typename C> class CActorReservoir:public CReservoir<C>
{
public:
bool Update(void)
{
CReservoirIterator<C> It=GetActiveObjectIterator();
++It;
//
while(!It.IsEnd())
{
if(!It.Object()->IsKilled())
{
if(!It.Object()->OnUpdate())
{
return false;
}
}
//
++It;
}
//
return true;
};
//
bool Draw(void)
{
CReservoirIterator<C> It=GetActiveObjectIterator();
++It;
//
while(!It.IsEnd())
{
if(!It.Object()->IsKilled())
{
if(!It.Object()->OnDraw())
{
return false;
}
}
//
++It;
}
//
return true;
};
};
IBaseReservoirObjectを継承してIBaseActorObjectにOnUpdate,OnDraw関数を追加し、(IsKilled関数もか)
最後にそれ用のテンプレートを用意しただけです
IsKilled関数は名前通りで、消去されているならtrueを呼び出すことにします
いちいちこんな関数を作っているのはIBaseActorObjectが参照カウンタを持ってるから
(シューティングの誘導弾とか作らない限りは要らない機能/作る場合でもいらないかも)
最終更新:2009年06月12日 09:54