【问题标题】:How to use SKAudioNode如何使用 SKAudioNode
【发布时间】:2016-07-09 17:48:58
【问题描述】:

我发现 SKAction playSoundFileNamed 在 IOS 9 中存在内存泄漏: https://forums.developer.apple.com/thread/20014

他们建议使用 SKAudioNode,但示例很快,我在项目中使用了 Objective-c。

例子:

func testAudioNode() {  
    let audioNode = SKAudioNode(fileNamed: "LevelUp")  
    audioNode.autoplayLooped = false  
    self.addChild(audioNode)  
    let playAction = SKAction.play()  
    audioNode.runAction(playAction)  
}  

我尝试过的:

-(void)testSound{
testSound = [SKAudioNode nodeWithFileNamed:@"test.wav"];
testSound.autoplayLooped = false;
[self addChild:testSound];

SKAction *playaction = [SKAction play];

[testSound runAction:playaction];
}

它会崩溃到:

[self addChild:testSound];

那么我将如何让它工作,只有在 IOS 9 中使用 SKAudioNode 播放声音以及在旧版本中使用 SKAction 播放声音的好技术是什么?

谢谢!

【问题讨论】:

  • 它崩溃了,因为testSound 为零。您必须正确创建 SKAudioNode...

标签: ios objective-c sprite-kit skaudionode


【解决方案1】:

方法+ nodeWithFileNamed: 通过从游戏的主包中加载存档文件来创建一个新节点。所以你不能在这种情况下使用它。

尝试这样的事情(使用 initWithFileNamed 初始化程序):

#import "GameScene.h"

@interface GameScene()
@property (nonatomic, strong)SKAudioNode *testSound;
@end

@implementation GameScene

-(void)didMoveToView:(SKView *)view{

     self.testSound = [[SKAudioNode alloc] initWithFileNamed:@"test.wav"];
     self.testSound.autoplayLooped = false;
     [self addChild:self.testSound];
}


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

   [self.testSound runAction:[SKAction play]];

}
@end

【讨论】:

  • 感谢您的快速回答!由于某种原因,您的代码在我的实际项目中不起作用,但我在新(空)项目中对其进行了测试,它运行良好!当游戏场景加载时它会立即崩溃......有任何疑问吗?
  • @TeKo 它也适用于我......你必须更具体地了解实际错误。
  • 它说:由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“所需条件为假:_engine->IsRunning()”
  • 我把它修好了!问题是场景转换后立即播放声音。 forums.developer.apple.com/thread/…非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多