使用Sprite-kit播放声音非常简单:
SKAction *readText = [SKAction playSoundFileNamed:@"soundfile.mp3" waitForCompletion:YES];
但是,我怎样才能使这种声音国际化,所以当语言改为西班牙语时,它需要西班牙语版本,英语或其他语言?
我导入了文件" soundifle.mp3"进入Xcode并选择本地化,基础,英语和西班牙语;然后将每个版本放在相应的文件夹中。不幸的是,模拟器始终运行相同的文件。我错过了什么?
如果我使用:
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
*由于未捕获的异常终止应用'缺少资源',原因:'资源/用户/ hector /库/应用程序支持/ iPhone模拟器/ 7.1 /应用程序/ 3F1151AD-856B -4F78-B504-784A8E3E7171 / Appname.app / ca.lproj / soundfile.mp3无法在主捆绑中找到' * 首先抛出调用堆栈:
答案 0 :(得分:0)
我希望它以这种方式工作,它只是从正确的语言文件夹中选择文件。假设您已经检查了构建的应用程序是否将声音实际复制到文件夹中,并验证您使用了正确的语言文件夹名称等等,我只能帮助解决这个问题: / p>
根据文档,您可以将文件路径传递给+playSoundFileNamed:waitForCompletion:
。所以我只想使用常规NSBundle pathForSoundResource:
方法(参见NSSound.h
)为当前语言生成正确的文件路径,然后传入该路径而不是简短的名称。您可以将类似的方法定义为SKAction上的类别,以使其更容易,例如+ (SKAction *)tor_playLocalizedSoundFileNamed:(NSString*)soundFile waitForCompletion:(BOOL)wait;
PS - 还有一些要测试的东西:你有两份声音吗?即一个在Resources,另一个在Resources / English.lproj或者它是什么?如果没有,你有没有检查如果你不在基础本地化中放置声音副本会发生什么?