我在游戏标题屏幕的 cocos2d 中制作了一个切换按钮。我想要这个开关来打开或关闭音乐。这是我到目前为止所做的:
我将 CCMenus 和 Sprites 添加到 .h 文件中:
CCMenu *menu2;
CCMenu *menutwo;
CCMenuItemImage *sound;
CCMenuItemSprite *soundOff;
然后我在 init 中添加了声音按钮和 NSUserDefaults:
// Sound Button
sound = [CCMenuItemImage itemWithNormalImage:@"music.png" selectedImage:@"music.png" target:self selector:@selector(soundSettings)];
sound.scale = 1.1;
menu2 = [CCMenu menuWithItems:sound, nil];
menu2.position = ccp(screenCenter.x - 33,screenCenter.y / 5);
[self addChild:menu2];
if([[NSUserDefaults standardUserDefaults] objectForKey:@"musicon"] == nil) {
[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"musicon"];
}
这是 CCSprite 上面调用的 soundSettings 方法:
- (void) soundSettings {
if([[NSUserDefaults standardUserDefaults] boolForKey:@"musicon"] == TRUE) {
[self removeChild:soundOff cleanup:YES];
[self removeChild:menutwo cleanup:YES];
sound = [CCMenuItemImage itemWithNormalImage:@"music.png" selectedImage:@"music.png" target:self selector:@selector(soundIsOff)];
sound.scale = 1.1;
menu2 = [CCMenu menuWithItems:sound, nil];
menu2.position = ccp(screenCenter.x - 33,screenCenter.y / 5);
[self addChild:menu2];
} else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"musicon"] == FALSE) {
[self removeChild:sound cleanup:YES];
[self removeChild:menu2 cleanup:YES];
soundOff = [CCMenuItemImage itemWithNormalImage:@"music-not.png" selectedImage:@"music-not.png" target:self selector:@selector(soundIsOn)];
soundOff.scale = 1.1;
menutwo = [CCMenu menuWithItems:soundOff, nil];
menutwo.position = ccp(screenCenter.x - 33,screenCenter.y / 5);
[self addChild:menutwo];
}
}
这些是切换 CCSprites 调用的 2 个方法:
-(void) soundIsOn {
[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"musicon"];
}
-(void) soundIsOff {
[[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"musicon"];
}
由于此代码位于标题屏幕中,因此这只会停止标题屏幕的音乐。一旦我进入另一个屏幕,音乐 BOOL 就会重置并再次变为 TRUE。如果有人能帮助我解决这个问题,我将非常感激。谢谢!
注意:这就是我检查音乐是否打开或关闭的方式:
if([[NSUserDefaults standardUserDefaults]boolForKey:@"musicon"] == TRUE) {
[[SimpleAudioEngine sharedEngine] playEffect:@"song.mp3"];
}
最佳答案
如下更改您的方法,您需要在 NSUserDefaults
中设置任何值后进行同步,以再次取回保存的值。
-(void) soundIsOn {
[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"musicon"];
[[NSUserDefaults standardUserDefaults] synchronize];// Add this
}
-(void) soundIsOff {
[[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"musicon"];
[[NSUserDefaults standardUserDefaults] synchronize];// Add this
}
关于ios - 音乐切换按钮 Objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20318966/