【问题标题】:Make SKAction playSoundFileNamed multilanguage ready准备好 SKAction playSoundFileNamed 多语言
【发布时间】:2014-10-04 10:47:37
【问题描述】:

使用 Sprite-kit 播放声音很简单:

SKAction *readText = [SKAction playSoundFileNamed:@"soundfile.mp3" waitForCompletion:YES];

但是,我怎样才能将这个声音国际化,所以当语言更改为西班牙语时,它需要西班牙语版本,英语或其他语言?

我将文件“soundifle.mp3”导入Xcode并选择了Localization、base、English和spanish;然后将每个版本放在相应的文件夹中。不幸的是,模拟器总是运行相同的文件。我错过了什么?

如果我使用:

NSBundle *bundle = [NSBundle mainBundle];
NSString * sndPath = [bundle pathForResource:@"soundfile" ofType:@"mp3"];
NSLog(@"Returning soundPath:%@",sndPath);
SKAction *readText = [SKAction playSoundFileNamed:sndPath waitForCompletion:YES];

当我使用该方法时,我得到: 返回soundPath:/Users/user/Library/Application Support/iPhone Simulator/7.1/Applications/3F1151AD-856B-4F78-B504-784A8E3E7171/Appname.app/es.lproj/soundfile.mp3

* 由于未捕获的异常“缺少资源”而终止应用程序,原因:“资源 /Users/hector/Library/Application Support/iPhone Simulator/7.1/Applications/3F1151AD-856B-4F78-B504-784A8E3E7171/Appname .app/ca.lproj/soundfile.mp3 在主包中找不到' * 首先抛出调用栈:

【问题讨论】:

    标签: internationalization sprite-kit xcode6 avaudioplayer


    【解决方案1】:

    我希望它能够以这种方式工作,它只会从正确的语言文件夹中选择文件。假设您已经检查了构建的应用程序是否将声音 实际上 复制到文件夹中,并确认您使用了正确的语言文件夹名称等,我只能帮助解决这个问题:

    根据文档,您可以将文件路径传递给+playSoundFileNamed:waitForCompletion:。所以我会使用常规的NSBundle pathForSoundResource: 方法(参见NSSound.h)为当前语言生成正确的文件路径,然后传入该路径而不是一个短名称。您可以将这样的方法定义为 SKAction 上的一个类别以使其更容易,例如+ (SKAction *)tor_playLocalizedSoundFileNamed:(NSString*)soundFile waitForCompletion:(BOOL)wait;

    PS - 还有几件事要测试:你有两个声音副本吗? IE。一个在 Resources 中,另一个在 Resources/English.lproj 或其他什么?如果没有,您是否检查过如果不将声音副本放入基础本地化中会发生什么?

    【讨论】:

    • 我试过了,但看起来 NSBundle for iOS 没有 pathForSoundResource: 方法。我如何在 iOS 编程中做到这一点?
    • 总有通用的 pathForResource:ofType:
    • 我用额外的信息编辑了这个问题。不幸的是 parthForResource 找到了文件,但是 SKAction 找不到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多