-(void) update:(ccTime)delta {
totalTime += delta;
if (fireButton.active && totalTime > nextShotTime) {
nextShotTime = totalTime + 0.5f;
GameScene* game = [GameScene sharedGameScene];
[game shootBulletFromShip:[game defaultShip]];
}
// Allow faster shooting by quickly tapping the fire button if (fireButton.active == NO)
{
nextShotTime = 0;
}
}
это оригинальный код из книги Штеффена Иттерхайма "Изучите разработку игр cocos2d".
Но я могу немного улучшить этот код.
Обновлено
Труднее понять мой код, чем оригинальный, но он имеет правильную структуру. Это означает следующее:
- глобальный таймер принадлежит сцене;
- корабль может стрелять из оружия;
- оружие может стрелять пулями, и задержка между пулями относится к этому оружию (не к сцене, как в оригинальном примере)
Класс Scene содержит переменную totalTime, объект корабля и следующий метод для обработки обновления таймера:
-(void)update:(ccTime)delta
{
totalTime += delta;
if (!fireButton.active) {
ship.weapon.nextShotTime = 0;
} else if (totalTime > ship.weapon.nextShotTime) {
[ship.weapon updateNextShotTime:totalTime];
[ship shoot];
}
}
Класс кораблей содержит объект оружия и метод выстрела (этот метод не подходит для этого вопроса).
Класс оружия содержит переменную nextShotTime и следующий метод:
-(void)updateNextShotTime:(ccTime)currentTime
{
nextShotTime = currentTime + 0.05f;
}