以下代码有效(我可以无限期重复播放声音):
SKAction *playMusic = [SKAction playSoundFileNamed:@"sound.m4a" waitForCompletion:NO];
SKAction *onRepeat = [SKAction repeatActionForever:playMusic];
[myScene runAction:onRepeat];
以下代码可以正常工作(我可以播放声音,并设置键以供以后访问):
SKAction *playMusic = [SKAction playSoundFileNamed:@"sound.m4a" waitForCompletion:NO];
[myScene runAction:onRepeat withKey:@"BackgroundMusic"];
以下代码失败(我无法通过按键访问重复的声音):
SKAction *playMusic = [SKAction playSoundFileNamed:@"sound.m4a" waitForCompletion:NO];
SKAction *onRepeat = [SKAction repeatActionForever:playMusic];
[myScene runAction:onRepeat withKey:@"BackgroundMusic"];
直到声音在应用程序崩溃10至15秒(“由于内存错误而终止”)之后,才会发出奇怪的咔嗒声而不是正在播放的声音。
有谁知道这个问题,或者您知道在任何地方都没有证明这种使用组合无效吗?
最佳答案
因此,解决方法是更改waitForCompletion:YES。
SKAction *playMusic = [SKAction playSoundFileNamed:@"sound.m4a" waitForCompletion:YES];
SKAction *onRepeat = [SKAction repeatActionForever:playMusic];
[myScene runAction:onRepeat withKey:@"BackgroundMusic"];
由于
playSoundFileNamed
的动作时长为0,因此它会继续尝试反复播放,从而导致声音和记忆问题。我不确定一个重复动作是唯一一个用该键注册的动作,还是不确定每个正在播放的动作是否都踩到了前一个动作。仅出于学术原因才非常重要。