mirror of https://github.com/axmolengine/axmol.git
Improve code and add stutter compensation.
This commit is contained in:
parent
3c3069b4fc
commit
ab3854f51a
|
@ -1016,25 +1016,20 @@ bool ParticleSystem::addAnimationIndex(unsigned short index, cocos2d::Rect rect,
|
|||
return true;
|
||||
}
|
||||
|
||||
void ParticleSystem::simulate(float seconds)
|
||||
{
|
||||
simulateFPS(seconds, 1.0F / Director::getInstance()->getAnimationInterval());
|
||||
}
|
||||
|
||||
void ParticleSystem::simulateFPS(float seconds, float frameRate)
|
||||
void ParticleSystem::simulate(float seconds, float frameRate)
|
||||
{
|
||||
auto l_updatePaused = _updatePaused;
|
||||
_updatePaused = false;
|
||||
seconds = seconds == SIMULATION_USE_PARTICLE_LIFETIME ?
|
||||
seconds = seconds == SIMULATION_USE_PARTICLE_LIFETIME ?
|
||||
getLife() + getLifeVar() : seconds;
|
||||
frameRate = frameRate == SIMULATION_USE_GAME_ANIMATION_INTERVAL ?
|
||||
1.0F / Director::getInstance()->getAnimationInterval() : frameRate;
|
||||
auto delta = 1.0F / frameRate;
|
||||
float lastDelta = 0.0F;
|
||||
if (seconds > delta)
|
||||
{
|
||||
while (seconds > 0.0F)
|
||||
{
|
||||
this->update(delta);
|
||||
lastDelta = seconds;
|
||||
seconds -= delta;
|
||||
}
|
||||
this->update(seconds);
|
||||
|
@ -1044,16 +1039,10 @@ void ParticleSystem::simulateFPS(float seconds, float frameRate)
|
|||
_updatePaused = l_updatePaused;
|
||||
}
|
||||
|
||||
void ParticleSystem::resimulate(float seconds)
|
||||
void ParticleSystem::resimulate(float seconds, float frameRate)
|
||||
{
|
||||
this->resetSystem();
|
||||
this->simulate(seconds);
|
||||
}
|
||||
|
||||
void ParticleSystem::resimulateFPS(float seconds, float frameRate)
|
||||
{
|
||||
this->resetSystem();
|
||||
this->simulateFPS(seconds, frameRate);
|
||||
this->simulate(seconds, frameRate);
|
||||
}
|
||||
|
||||
void ParticleSystem::onEnter()
|
||||
|
@ -1111,6 +1100,12 @@ void ParticleSystem::update(float dt)
|
|||
_componentContainer->visit(dt);
|
||||
}
|
||||
|
||||
if (dt > 0.5F)
|
||||
{
|
||||
this->simulate(dt, 15);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_fixedFPS != 0)
|
||||
{
|
||||
_fixedFPSDelta += dt;
|
||||
|
|
|
@ -271,6 +271,9 @@ public:
|
|||
|
||||
/** The simulation's seconds are set to the particles' lifetime specified inclusive of variant. */
|
||||
SIMULATION_USE_PARTICLE_LIFETIME = -1,
|
||||
|
||||
/** The simulation's framerate is set to the animation interval specified in director. */
|
||||
SIMULATION_USE_GAME_ANIMATION_INTERVAL = -1,
|
||||
};
|
||||
|
||||
/** Creates an initializes a ParticleSystem from a plist file.
|
||||
|
@ -948,34 +951,22 @@ public:
|
|||
*/
|
||||
void setPositionType(PositionType type) { _positionType = type; }
|
||||
|
||||
/** Advance the particle system and make it seem like it ran for this many seconds.
|
||||
* The frame rate used for simulation accuracy is the screens refresh rate.
|
||||
*
|
||||
* @param seconds Seconds to advance. value of -1 means (SIMULATION_USE_PARTICLE_LIFETIME)
|
||||
*/
|
||||
void simulate(float seconds = SIMULATION_USE_PARTICLE_LIFETIME);
|
||||
|
||||
/** Advance the particle system and make it seem like it ran for this many seconds.
|
||||
*
|
||||
* @param seconds Seconds to advance. value of -1 means (SIMULATION_USE_PARTICLE_LIFETIME)
|
||||
* @param frameRate Frame rate to run the simulation with (preferred: 30.0) The higher this value is the more accurate the simulation will be at the cost of performance.
|
||||
* @param frameRate Frame rate to run the simulation with (preferred: 30.0) The higher this value is the more accurate the simulation will be at the cost of performance. value of -1 means (SIMULATION_USE_GAME_ANIMATION_INTERVAL)
|
||||
*/
|
||||
void simulateFPS(float seconds = SIMULATION_USE_PARTICLE_LIFETIME, float frameRate = 30.0F);
|
||||
void simulate(float seconds = SIMULATION_USE_PARTICLE_LIFETIME,
|
||||
float frameRate = SIMULATION_USE_GAME_ANIMATION_INTERVAL);
|
||||
|
||||
/** Resets the particle system and then advances the particle system and make it seem like it ran for this many
|
||||
* seconds. The frame rate used for simulation accuracy is the screens refresh rate.
|
||||
*
|
||||
* @param seconds Seconds to advance. value of -1 means (SIMULATION_USE_PARTICLE_LIFETIME)
|
||||
* @param frameRate Frame rate to run the simulation with (preferred: 30.0) The higher this value is the more accurate the simulation will be at the cost of performance. value of -1 means (SIMULATION_USE_GAME_ANIMATION_INTERVAL)
|
||||
*/
|
||||
void resimulate(float seconds = SIMULATION_USE_PARTICLE_LIFETIME);
|
||||
|
||||
/** Resets the particle system and then advances the particle system and make it seem like it ran for this many
|
||||
* seconds. The frame rate used for simulation accuracy is the screens refresh rate.
|
||||
*
|
||||
* @param seconds Seconds to advance. value of -1 means (SIMULATION_USE_PARTICLE_LIFETIME)
|
||||
* @param frameRate Frame rate to run the simulation with (preferred: 30.0) The higher this value is the more accurate the simulation will be at the cost of performance.
|
||||
*/
|
||||
void resimulateFPS(float seconds = SIMULATION_USE_PARTICLE_LIFETIME, float frameRate = 30.0F);
|
||||
void resimulate(float seconds = SIMULATION_USE_PARTICLE_LIFETIME,
|
||||
float frameRate = SIMULATION_USE_GAME_ANIMATION_INTERVAL);
|
||||
|
||||
// Overrides
|
||||
virtual void onEnter() override;
|
||||
|
|
Loading…
Reference in New Issue