很抱歉这么快就错过了两次,但是由于人们对他们的反馈非常友好,我觉得提出另一个问题不会有什么坏处。
同样的程序我试图让它相当时髦,并有一个主屏幕,允许您点击一个按钮,导致有限的选项屏幕。这可以让您打开或关闭音乐。或者至少应该这样做。
音乐运行代码位于主文件(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文件包含我尝试使用的类方法。如果方法导致YES,则音乐开启。如果是“否”,则表示音乐已关闭。
settings.m
static BOOL isMusicEnabled;
@implementation Settings
+ (BOOL)musicEnabled
{
return isMusicEnabled;
}
+ (void)setMusicEnabled:(BOOL)value
{
isMusicEnabled = value;
NSLog(@"SME? %i", isMusicEnabled);
}
@end
现在,选项文件正在运行,我测试了该部分。该程序正在读取isMusicEnabled正在获取一个新值,因此musicEnabled也会被更改,因此应该有一个更改,音乐应该被关闭。
然而,没有任何反应。我试图使用调试器,但我不是很擅长它,我不理解我给出的很多信息。我知道问题是将消息从Settings文件发送到main / Game文件。
我会劝告任何人的帮助,他们可以告诉我如何解决这个问题。
答案 0 :(得分:0)
我对Sparrow Framework并不熟悉,但无论如何我都要猜一下。
[channel play];
开始在后台播放音乐,直到channel
被要求停止播放。
更改isMusicEnabled不会触发任何代码来停止当前播放的音乐。当您更改“设置”中的值时,您应该通知频道停止(最有可能通过某种方式访问channel
并呼叫[channel stop]
。
还有另一个问题 - isMusicEnabled只是内存中的一个变量,你的程序将不会记住重启之间的状态。通常应该记住设置。
总结一下,我看到两个问题:首先在重新启动之间保持设置,然后再次通知设置更改。要记住设置,我建议您查看NSUserDefaults类。要通知channel
停止播放,您有几种选择 - 取决于您的技能。最简单的方法是从setMusicEnabled
中简单地访问频道变量并调用stop
。另一个选择是使用通知,但对于更复杂的初学者程序员(如果感兴趣,请查找NSNotificationCenter)。