音乐切换按钮objective-c
Posted
技术标签:
【中文标题】音乐切换按钮objective-c【英文标题】:Music toggle button objective-c 【发布时间】:2013-12-02 00:17:40 【问题描述】:我在 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"];
【问题讨论】:
"musicon" vs "musicOn" ...案例很重要。 抱歉打错了...在我的代码中,我只将它作为“音乐”。 【参考方案1】:改变你的方法如下,你需要在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
【讨论】:
很高兴它有帮助。快乐编码。以上是关于音乐切换按钮objective-c的主要内容,如果未能解决你的问题,请参考以下文章