Что вы используете для воспроизведения звуков? Я думаю, что вы могли бы отключить звуки, отключив аудио сеанс - см. AudioSessionSetActive .
Обновление: Да, вы правы. Я только что попытался отключить аудио сеанс, и звуки, казалось, продолжались. Не берите в голову. Вы можете использовать подход логического флага, и нет необходимости иметь условие вокруг каждого звука. Я делаю SFX в своей игре через отдельный класс, своего рода «вид», который наблюдает за моделью и создает звуки для различных игровых событий. Таким образом, вы сохраняете четкое разделение проблем в дизайне, а когда вы хотите отключить звуки, вы просто отключаете класс звука от модели. Код выглядит примерно так:
@implementation Model
- (void) stepBy: (double) seconds
{
[player doSomething];
if (player.isDead)
[self sendNotification:@selector(playerHasDied:) withObject:player];
}
@end
И звук просмотра:
@implementation SFX
- (void) playerHasDied: (id) player
{
[aarghSound play];
}
@end
Конечно, вы должны реализовать фактическую часть наблюдения. Вы можете использовать NSNotificationCenter
или написать свой собственный диспетчерский код, используя массив наблюдателей:
@implementation Model
- (void) addObserver: (id) object
{
[observers addObject:object];
}
- (void) sendNotification: (SEL) message
{
for (id observer in observers)
if ([observer respondsToSelector:message])
[observer performSelector:message];
}
@end
Вид SFX подключен к модели:
Model *model = [[Model alloc] init];
SFX *sounds = [[SFX alloc] init];
[model addObserver:sounds];
Когда вы хотите отключить все звуки, вы просто отключаете SFX от модели; прекрати наблюдать. Если звуки отключены до начала игры, вам даже не нужно выделять класс SFX - это экономит время, производительность и память.