泛型粒子系統的設計6 (轉)
:namespace prefix = o ns = "urn:schemas--com::office" />
// 移動位置器
template<
class _ParticleType,
size_t nVelIndex
> class TMovePosActor {
protected:
typedef _ParticleType tParticle;
public:
// 更新
template< size_t nIndex >
void Action( const double& dTime, tParticle& p ) {
p.Part< nIndex >().m_Value += p.Part< nVelIndex >().m_Value * dTime;
}
};
TMovePosActor是一個移動位置更新器,它根據當前的速度值更新位置,只能應用於粒子的位置部分。它有兩個模板引數,_ParticleType用於指定所需要更新的粒子型別,nVelIndex用於指定粒子的速度部分在粒子結構中的。
// 重力速度更新器
template<
class _ParticleType,
typename _Vector3Type
> class TGravityVelActor {
protected:
typedef _ParticleType tParticle;
typedef _Vector3Type tVector3;
// 重力加速度
tVector
public:
TGravityVelActor( void )
: m_vGravity( tVector3( 0.0,-9.8, 0.0 ) )
{}
// 設定重力加速度
void SetGravity( const tVector3& vec3 ) {
m_vGravity = vec3;
}
// 執行更新
template< size_t nIndex >
void Action( const double& dTime, tParticle& p ) {
p.Part< nIndex >().m_Value += m_vGravity * dTime;
}
};
TGravityVelActor是一個重力速度更新器,它根據指定的重力加速度更新速度,只能應用於粒子的速度部分。它有兩個模板引數,_ParticleType用於指定所需要更新的粒子型別,_Vector3Type用於指定重力加速度的型別。公共成員SetGravity終於設定重力加速度。
// 壽命逝去更新器
template<
class _ParticleType
> class TElapseLifeActor {
protected:
typedef _ParticleType tParticle;
public:
// 執行更新
template< size_t nIndex >
void Action( const double& dTime, tParticle& p ) {
p.Part< nIndex >().m_Value -= dTime;
}
};
TElapseLifeActor是一個壽命逝去更新器,它根據逝去的時間減少壽命,只能應用於粒子的壽命部分。它有一個模板引數,_ParticleType用於指定所需要更新的粒子型別。
// 死亡斷言更新器
template<
class _ParticleType
> class TDeadLifeActor {
protected:
typedef _ParticleType tParticle;
typedef boost::function< bool ( const tParticle& ) > tfnDead;
// 死亡斷言函式
tfnDead m_DeadPred;
public:
// Set dead predicate
void SetDeadPredicate( const tfnDead& DeadPred ) { m_DeadPred = DeadPred; }
// 執行更新
template< size_t nIndex >
void Action( const double&, tParticle& p ) {
if( ! m_DeadPred.empty() ) {
if( m_DeadPred( p ) ) p.Part< nIndex >().m_Value =
}
}
};
TDeadLifeActor是一個死亡斷言更新器,它死亡斷言函式物件來確認粒子是否死亡,如果死亡則修改壽命值為-0.0,只能應用於粒子的壽命部分。它有一個模板引數,_ParticleType用於指定所需要更新的粒子型別。
如果以上提到的內建更新器中並沒有您需要的,那麼動手自定義一個更新器也是一件非常輕鬆愉快的事情。
// 退色更新器
template<
class _ParticleType,
typename _ColorType,
size_t nFadeIndex
> class TFadeColorActor {
protected:
typedef _ParticleType tParticle;
typedef _ColorType tColor;
// 顏色一
tColor m_Value1;
// 顏色二
tColor m_Value2;
public:
TFadeColorActor( void )
: m_Value1( tColor( 1.0, 1.0, 1.0, 1.0 ) )
, m_Value2( tColor( 0.0, 0.0, 0.0, 1.0 ) )
{}
// 設定顏色一
void SetColorOne( const tColor& col ) {
m_Value1 = col;
}
// 設定顏色二
void SetColorTwo( const tColor& col ) {
m_Value2 = col;
}
// 執行更新
template< size_t nIndex >
void Action( const double& dTime, tParticle& p ) {
p.Part< nIndex >().m_Value += ( m_Value2 - m_Value1 ) * p.Part< nFadeIndex >().m_Value * dTime;
}
};
這裡我們自定義了一個根據壽命值使粒子顏色由顏色一退為顏色二的更新器,只能應用於粒子的顏色部分。它有三個模板引數,_ParticleType用於指定所需要更新的粒子型別,_ColorType用於指定顏色型別,nFadeIndex用於指定退色因子在粒子結構中的索引。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-969593/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 泛型粒子系統的設計1 (轉)泛型
- 泛型粒子系統的設計2 (轉)泛型
- 泛型粒子系統的設計3 (轉)泛型
- 泛型粒子系統的設計4 (轉)泛型
- 泛型粒子系統的設計5 (轉)泛型
- 泛型粒子系統的設計7 (轉)泛型
- 泛型類及系統中常用的泛型類泛型
- .NET泛型程式設計簡介 (轉)泛型程式設計
- 泛型程式設計泛型程式設計
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- java 泛型程式設計Java泛型程式設計
- [CUJ]泛型程式設計--轉移建構函式 (轉)泛型程式設計函式
- Windows系統上泛域名解析的設定(轉)Windows
- 十、GO程式設計模式 : 泛型程式設計Go程式設計設計模式泛型
- 【科普】.NET6 泛型泛型
- 談談 "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++
- 微機原理與系統設計筆記6 | 儲存器系統設計筆記
- 轉向Kotlin——泛型Kotlin泛型
- Three.js開發指南(7):粒子和粒子系統JS
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 泛型類、泛型方法及泛型應用泛型
- 在C語言中實現泛型程式設計C語言泛型程式設計
- C語言如何實現泛型程式設計?C語言泛型程式設計