以下代码有效(我可以无限期重复播放声音):

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,因此它会继续尝试反复播放,从而导致声音和记忆问题。

我不确定一个重复动作是唯一一个用该键注册的动作,还是不确定每个正在播放的动作是否都踩到了前一个动作。仅出于学术原因才非常重要。

10-07 12:44