我假设您在游戏循环中使用某种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 出于某种原因不允许您这样做。我在网上找到了一个similar question,他们建议你玩posVar和speed,以便在你过渡到场景时让它们足够大,一旦你完全过渡到场景中,重置值正常。您可能想尝试一下!
希望有帮助!