音乐切换按钮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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Inno Setup 中制作停止和暂停/恢复/播放音乐按钮

切换按钮静音(快速)

1600802038

iOS 简单音乐播放器 界面搭建

微信公众号文章音乐自动播放

在 HTML 音频播放器中切换播放/暂停按钮