0

很抱歉这么快就犯了两次错误,但由于人们在他们的信息反应中非常友善,我认为再问一个问题也无妨。

同一个程序,我试图让它相当时髦,并有一个主屏幕,允许你点击一个按钮,这会导致一个有限的选项屏幕。这使您可以打开或关闭音乐。或者至少它应该这样做。

音乐运行代码在主文件(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 框架。基本上,设置文件包含我尝试使用的类方法。如果方法导致“是”,则音乐已打开。如果为否,则音乐已关闭。

设置.m

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

现在,选项文件正在工作,我测试了该部分。该程序正在读取 isMusicEnabled 正在获得一个新值,因此 musicEnabled 也正在被更改,因此应该进行更改并且应该关闭音乐。

然而,什么也没有发生。我曾尝试使用调试器,但我不太擅长它,而且我不了解我提供的很多信息。我确实了解问题是将消息从设置文件发送到主/游戏文件。

我会感谢任何可以启发我如何解决这个问题的人的帮助。

4

1 回答 1

0

我对 Sparrow 框架不熟悉,但无论如何让我猜测一下。

[channel play];开始在后台播放音乐,直到channel被要求停止播放。

更改 isMusicEnabled 不会触发任何代码来停止当前播放的音乐。当您更改设置中的值时,您应该通知频道停止(很可能通过某种方式访问channel​​并调用[channel stop].

还有另一个问题 - isMusicEnabled 只是内存中的一个变量,您的程序不会记住它在重新启动之间的状态。并且设置通常应该被记住。

总而言之,我看到了两个问题:首先在重新启动之间保留设置,然后通知设置更改。要记住设置,我建议您查看 NSUserDefaults 类。要通知channel停止播放,您有几个选择 - 取决于您的技能。最简单的方法是从setMusicEnabledand 调用中简单地访问通道变量stop。另一种选择是使用通知,但对于更复杂的初学者程序员(如果感兴趣,请查找 NSNotificationCenter)。

于 2010-09-23T18:27:03.860 回答