SpriteKit runAction:withKey:与repeatActionForever结合:崩溃应用程序

时间:2015-03-31 17:15:17

标签: ios objective-c sprite-kit skaction

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

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秒后崩溃("由于内存错误&#34而终止;)。

有没有人知道这个问题,或者这种使用组合在您知道的任何地方都记录为无效?

1 个答案:

答案 0 :(得分:1)

所以,修复方法是更改​​ waitForCompletion:是

SKAction *playMusic = [SKAction playSoundFileNamed:@"sound.m4a" waitForCompletion:YES];
SKAction *onRepeat = [SKAction repeatActionForever:playMusic];
[myScene runAction:onRepeat withKey:@"BackgroundMusic"];

由于playSoundFileNamed动作长度为0,它会继续尝试反复播放,导致不愉快的声音和记忆问题。

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