pyor是一种很好的粒子系统,官方有提供OpenGL的接口
然后想移植到cocos2dx里面使用。
但是无论怎么也没弄好。希望有大神帮助!悬赏500大洋
,码农不易
官网可以下载得到http://pyro.fenomen-games.com/
头文件定义几个对象
float m_fTime;
PyroParticles::IPyroFile *m_PyroFile;
PyroParticles::CEmitterList *m_Emitters;
```
init方法添加
m_fTime = 0;
PyroParticles::PyroGraphics::IDevice *pPyroGraphicsDevice = new PyroParticles::CGraphics_OGL();
auto g_pParticleLibrary = CreateParticleLibrary(PYRO_SDK_VERSION);
g_pParticleLibrary->Init(pPyroGraphicsDevice);
m_Emitters = new PyroParticles::CEmitterList();
m_PyroFile = g_pParticleLibrary->LoadPyroFile("PyroDemo.pyro");
m_PyroFile->CreateTextures();
const PyroParticles::IPyroParticleEmitter *pEmitter = m_PyroFile->GetFileEmitter(0);
const char *pEmitterName = pEmitter->GetName();
m_Emitters->Append(m_PyroFile, pEmitterName, m_fTime, 300, 300);
```
下面是update 和draw
void HelloWorld::update(float delta)
{
float PrevTime = m_fTime;
m_fTime += delta;
float TimeDelta = m_fTime - PrevTime;
float CurTime = PrevTime;
while (TimeDelta > 0.0f)
{
float SafeTimeDelta = (TimeDelta >= 0.02f) ? 0.02f : TimeDelta;
m_Emitters->Move(CurTime, SafeTimeDelta);
m_Emitters->Prepare(CurTime, SafeTimeDelta);
CurTime += SafeTimeDelta;
TimeDelta -= SafeTimeDelta;
}
}
void HelloWorld::draw(Renderer *renderer, const Mat4& transform, uint32_t flags)
{
_customCommand.init(_globalZOrder);
_customCommand.func = CC_CALLBACK_0(HelloWorld::onDraw, this, transform, flags);
renderer->addCommand(&_customCommand);
}
void HelloWorld::onDraw(const Mat4 &transform, uint32_t flags)
{
Director* director = Director::getInstance();
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform);
m_Emitters->Render(m_fTime);
m_Emitters->RemoveInactive(m_fTime, 0.1f);
}
```
运行后并没有得到预想的结果, 看到的只是在其他精灵(如helloworld)上有一闪一闪亮光。
