Objective-c -> метод класса для запроса основного файла - PullRequest
0 голосов
/ 23 сентября 2010

Извините, что ошибаюсь вдвое быстрее, но, поскольку люди были так добры в своих информативных ответах, я подумал, что задавать другой вопрос не повредит.

Та же программа, которую я пытался сделать довольно шикарной и иметь главный экран, который позволяет нажимать на кнопку, которая приводит к экрану с ограниченными возможностями. Это позволяет вам включать или выключать музыку. Или, по крайней мере, так должно быть.

Код запуска музыки находится в основном файле (game.m), под следующим:

//Music
[Settings setMusicEnabled:YES];
music = [SPSound soundWithContentsOfFile:@"music.caf"];
channel = [[music createChannel] retain];
channel.loop = YES;
channel.volume = 0.25;
if([Settings musicEnabled]){
    [channel play];
}

Прошу прощения за странный формат, но это фреймворк Sparrow. в основном, файл настроек содержит методы класса, которые я пытаюсь использовать. Если методы вызывают ДА, музыка включена. Если это Нет, то музыка выключена.

settings.m

static BOOL isMusicEnabled;
@implementation Settings
+ (BOOL)musicEnabled
{
    return isMusicEnabled;
}
+ (void)setMusicEnabled:(BOOL)value
{
    isMusicEnabled = value;
    NSLog(@"SME? %i", isMusicEnabled);
}
@end

Теперь файл опций работает, и я протестировал этот раздел. Программа читает, что isMusicEnabled получает новое значение, таким образом, musicEnabled также изменяется, поэтому должно быть изменение, и музыка должна быть выключена.

Однако ничего не происходит. Я пытался использовать отладчик, но я не очень хорош в этом, и я не понимаю много информации, которую мне дают. Я понимаю, что проблема заключается в отправке сообщения из файла настроек в основной файл / файл игры.

Я бы оценил помощь любого, кто мог бы просветить меня относительно того, как это можно решить.

1 Ответ

0 голосов
/ 23 сентября 2010

Я не знаком с Sparrow Framework, но в любом случае позвольте мне сделать предположение.

[channel play]; начинает воспроизводить музыку в фоновом режиме, пока channel не попросят прекратить воспроизведение.

Изменение isMusicEnabled не вызывает какой-либо код для остановки воспроизводимой в данный момент музыки.Когда вы изменяете значение в настройках, вы должны сообщить каналу об остановке (скорее всего, каким-то образом получив доступ к channel и вызвав [channel stop].

. Есть еще одна проблема - isMusicEnabled - это просто переменная в памяти, вашаПрограмма не будет помнить свое состояние между перезапусками. И Настройки, как правило, должны быть запомнены.

Подводя итог, я вижу две проблемы: сохранение настроек между перезапусками во-первых и информирование об изменении настроек во-вторых. Чтобы запомнить настройки, я предлагаю вамзагляните в класс NSUserDefaults. Чтобы сообщить channel о прекращении игры, у вас есть несколько вариантов - в зависимости от ваших навыков. Самый простой - просто получить доступ к переменной канала из setMusicEnabled и вызвать stop. Другой вариант -используйте уведомления, но для начинающего программиста, который является более сложным (ищите NSNotificationCenter, если интересно).

...