Я предполагаю, что вы используете какой-то метод 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.
}
Обратите внимание , что с этого момента, если вы хотите остановить рендеринг, вам нужно только сбросить 2 переменные, как в методе init
, и тот же эффект произойдет.
РЕДАКТИРОВАТЬ2: После дальнейшего разъяснения нам нужно только адаптировать 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];
}
Это будет быстрее, но может иметь несколько проблем в зависимости от параметров ваших частиц.
РЕДАКТИРОВАТЬ3: Так что, изучая это далее, cocos2D не позволяет вам сделать это по некоторым причинам. Я нашел похожий вопрос онлайн на этот вопрос, и они предложили вам поиграть с posVar
и speed
, чтобы сделать их достаточно большими, пока вы переходите на сцену, и как только вы полностью перешли на сцена, сбросьте значения до нормального. Вы можете попробовать это!
Надеюсь, что поможет!