我正在开发一个具有太空背景的基于cocos2d的应用程序,其中我利用CCQuadParticleSystem来制作闪烁的星星。我已经用ParticleDesigner生成了这个粒子系统。当我加载粒子系统时,代表星星的白点开始出现在背景中,过了一段时间它们就消失了,所以在粒子系统达到状态的几秒钟后,一个充满星星的夜空就出来了。
我的问题是,我想知道是否有一种方法可以使粒子系统从未来的特定时间开始(例如t0 =3秒),这样我就不必等待所有的开始闪烁。
我希望我已经清楚地解释了这个问题。
提前谢谢你
安德里亚
发布于 2011-09-04 16:01:07
我假设您在游戏循环中使用某种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.最后,在render方法中:
if(particleShouldRender){
// render your particle.
}注意,从现在开始,如果你想停止渲染,你只需要重置两个变量,就像在init方法中一样,同样的效果也会发生。
EDIT2:进一步澄清后,我们只需要调整粒子的init方法。我将在这里做两个假设,您只需稍微更改它们即可满足您的需求。假设您的更新周期为每秒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使它们足够大,一旦你完全过渡到场景中,就将这些值重新设置为normal。你可能想试一试!
希望这能有所帮助!
发布于 2012-12-11 06:39:28
我这样做了,它完全按照我想要的方式工作。
for (int i = 0 ; i < 300 ; i++)
[emitter update:.1];发布于 2011-09-04 00:52:47
你试过了吗
id actions = [CCSequence actions:[CCDelayTime actionWithDuration:3.0f],
[CCCallFunc actionWithTarget:self selector:@selector(onStallComplete)],
nil];
[self runAction:actions];好吧,假设它可能滥用了API的原始意图,但它是有用的
如果您有多个这样的延迟反应,请注意onStallComplete中的可重入性。
注意:新手在这样,希望代码片段看起来是正确的。
https://stackoverflow.com/questions/6623611
复制相似问题