泛型粒子系統的設計7 (轉)
五、死亡
相對於初始化器和器,死亡觸發器要簡單一些,在有粒子死亡時On成員將被。內建了兩個死亡觸發器。:namespace prefix = o ns = "urn:schemas--com::office" />
// 空死亡觸發器
template<
class _ParticleType
> class TNilDeadTrigger {
protected:
typedef _ParticleType tParticle;
public:
void On( const tParticle& ) const {
}
};
TNilDeadTrigger是一個空死亡觸發器,它不對粒子的死亡做任何的處理。它有一個模板引數,_ParticleType用於指定所需要更新的粒子型別。
// 簡單死亡觸發器
template<
class _ParticleType
> class TSimpleDeadTrigger {
protected:
typedef _ParticleType tParticle;
typedef boost::function< void ( const tParticle& ) > tfnDeadTrigger;
// 死亡觸發函式
tfnDeadTrigger m_DeadTrigger;
public:
// 設定死亡觸發函式物件
void SetDeadTrigger( const tfnDeadTrigger& DeadTrigger ) {
m_DeadTrigger = DeadTrigger;
}
// 處理死亡事件
void On( const tParticle& p ) const {
if( ! m_DeadTrigger.empty() ) m_DeadTrigger( p );
}
};
TSimpleDeadTrigger是一個簡單死亡觸發器,當有粒子死亡時他呼叫死亡觸發函式物件,公共成員函式SetDeadTrigger用於設定死亡觸發函式物件。它有一個模板引數,_ParticleType用於指定所需要更新的粒子型別。
六、其他
完成了以上工作後我幾乎幾經設計出了易於擴充套件,適應性強的泛型粒子系統了。為什麼我要說幾乎呢?不知道您有沒有發現現在一個粒子部分只能對應一個初始化器,和一個更新器。如果我們需要用兩個初始化器來初始化一個粒子部分,用兩個更新器來更新一個粒子部分該怎麼辦呢?這就需要設計一個結合兩個初始化器和結合兩個更新器的工具。
// 整合兩個初始化器
template<
class _ParticleType,
class _PolicyOne,
class _PolicyTwo
> class TBothInitializerPolicy
: public _PolicyOne
, public _PolicyTwo
{
protected:
typedef _ParticleType tParticle;
public:
// 初始化
template< size_t nIndex >
void Action( tParticle& p ) {
_PolicyOne::Action< nIndex >( p );
_PolicyTwo::Action< nIndex >( p );
}
};
TBothInitializerPolicy整合了兩個初始化器,使他們共同作用於一個粒子部分。它有三個模板引數,_ParticleType用於指定所需要初始化的粒子型別,_PolicyOne用於指定第一個初始化器,_PolicyTwo用於指定第二個初始化器。
// 整合兩個更新器
template<
class _ParticleType,
class _PolicyOne,
class _PolicyTwo
> class TBothActorPolicy
: public _PolicyOne
, public _PolicyTwo
{
protected:
typedef _ParticleType tParticle;
public:
// 執行更新
template< size_t nIndex >
void Action( const double& dTime, tParticle& p ) {
_PolicyOne::Action< nIndex >( dTime, p );
_PolicyTwo::Action< nIndex >( dTime, p );
}
};
TBothActorPolicy整合了兩個更新器,使他們共同作用於一個粒子部分。它有三個模板引數,_ParticleType用於指定所需要更新的粒子型別,_PolicyOne用於指定第一個更新器,_PolicyTwo用於指定第二個更新器。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-969595/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 泛型粒子系統的設計1 (轉)泛型
- 泛型粒子系統的設計2 (轉)泛型
- 泛型粒子系統的設計3 (轉)泛型
- 泛型粒子系統的設計4 (轉)泛型
- 泛型粒子系統的設計5 (轉)泛型
- 泛型粒子系統的設計6 (轉)泛型
- 泛型類及系統中常用的泛型類泛型
- .NET泛型程式設計簡介 (轉)泛型程式設計
- Three.js開發指南(7):粒子和粒子系統JS
- 泛型程式設計泛型程式設計
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- Java(7)泛型Java泛型
- java 泛型程式設計Java泛型程式設計
- [CUJ]泛型程式設計--轉移建構函式 (轉)泛型程式設計函式
- Windows系統上泛域名解析的設定(轉)Windows
- 十、GO程式設計模式 : 泛型程式設計Go程式設計設計模式泛型
- 談談 "JS 和 設計泛型"JS泛型
- 泛型程式設計詳解(一)泛型程式設計
- 泛型程式設計與 OI——modint泛型程式設計
- C#學習 [型別系統] 泛型(16)C#型別泛型
- hugo.elias專題 之 粒子系統 (轉)Go
- c++ 泛型 程式設計 之 Functor 設計模式C++泛型程式設計設計模式
- Kotlin語言中的泛型設計哲學Kotlin泛型
- Go泛型草案設計簡明指南Go泛型
- c++ 泛型程式設計 之 TypeListsC++泛型程式設計
- 泛型轉DataTable方法泛型
- 物件導向程式設計和`GP`泛型程式設計物件程式設計泛型
- Dart語法篇之型別系統與泛型(七)Dart型別泛型
- 使用 Go 泛型的函數語言程式設計Go泛型函數程式設計
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- GO語言泛型程式設計實踐Go泛型程式設計
- 泛型程式設計在非C++語言中的實現之探討 (轉)泛型程式設計C++
- 轉向Kotlin——泛型Kotlin泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 泛型類、泛型方法及泛型應用泛型
- 在C語言中實現泛型程式設計C語言泛型程式設計
- C語言如何實現泛型程式設計?C語言泛型程式設計
- Swift使用協議加泛型程式設計(一)Swift協議泛型程式設計