ios - 音乐切换按钮 Objective-c

标签 ios iphone objective-c cocos2d-iphone

我在游戏标题屏幕的 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/

相关文章:

ios - NSUserDefaults 在设备和模拟器上工作,但在通过 .ipa 安装时在设备上返回 NULL

ios - 为什么我的 Tabbar 的用户交互在从 popviewcontroller 到另一个 View 时启用?

ios - 在drawRect()方法中绘制CoreGraphics线时遇到问题

ios - 在 Ios 中,当项目源在 xamarin.forms 中更新时,ListView 会自动滚动到顶部。在ios中保持滚动位置

iphone - iPad动画用什么? SVG?动图?其他?

iphone - 有没有办法找到 UICollectionView 部分的索引?

objective-c - 在自定义 View 中实现目标 - 操作模式

ios - Xcode 9.1 源代码控制 : failed to load revisions

ios - 当 flatMapped 时,Combine 的 Future 永远不会完成

ios - div 不应该在 iPhone 上的另一个 div 之上