我假设您在游戏循环中使用某种updateWithDelta:
方法来更新粒子。如果您希望粒子在某个时间间隔后开始,请制作您自己的计时器。
编辑:根据您在下面的评论,我的方法仍然很好,只是需要一些调整。您只需updateWithDelta:
在粒子系统上的方法中删除条件。这样,它仍然会在这 3 秒内更新,但不会渲染,因此看起来就像您描述的那样。
在 .h 文件中:
BOOL particleShouldUpdate;
float particleTimer;
在你的init
方法中:
particleShouldRender = NO;
particleTimer = 3.0f;
在你的updateWithDelta:
方法中:
if(!particleShouldRender){
particleTimer -= delta;
if(particleTimer < 0){
particleShouldRender = YES;
}
}
// update your particle.
最后,在您的渲染方法中:
if(particleShouldRender){
// render your particle.
}
注意,从这一点开始,如果你想停止它的渲染,你只需要像init
方法中那样重置2个变量,就会出现同样的效果。
EDIT2:经过进一步澄清,我们只需要调整init
您的粒子的方法。我将在这里做出 2 个假设,您只需稍微更改它们即可满足您的需求。假设您的更新周期为每秒 60 帧,最小粒子寿命为 1.01,并且您希望在开始游戏之前进行 3 秒的更新。然后在init
方法中,尝试:
for(float delta = 0.0f; delta < 3.0f; delta += (1/60)){
[particle updateWithDelta:(float)(1/60)];
}
这将像往常一样更新您的粒子,但不会在每个时间间隔进行渲染,并且在更新其他任何内容之前。或者,如果您在更新粒子时担心速度,您可以尝试:
for(int i = 0; i < 3; i++){
[particle updateWithDelta:1];
[particle updateWithDelta:0.02];
}
这会更快,但可能会有一些问题,具体取决于您的粒子参数。
EDIT3:因此进一步研究,cocos2D 出于某种原因不允许您这样做。我在网上发现了一个与此类似的问题,他们建议你在过渡到场景时使用posVar
和speed
使它们足够大,一旦你完全过渡到场景中,将值重置为正常值。您可能想尝试一下!
希望有帮助!