2016-03-22 15 views
3

fand ich heraus, SKAction playSoundFileNamed tut Speicherleck in IOS 9: https://forums.developer.apple.com/thread/20014Wie SKAudioNode verwenden

Sie empfehlen SKAudioNode zu verwenden, aber das Beispiel ist schnell und ich verwende Objective-C in meinem Projekt.

Beispiel:

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

Was ich versucht habe:

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

SKAction *playaction = [SKAction play]; 

[testSound runAction:playaction]; 
} 

Es wird abstürzen zu:

[self addChild:testSound]; 

So, wie ich es bekommen würde arbeiten, was ist eine gute Technik für Spielen Sie Sounds mit SKAudioNode nur in IOS 9> und mit SKAction in älteren Versionen?

Danke!

+0

Es stürzt ab, weil 'testSound' null ist. Sie müssen SKAudioNode richtig erstellen ... – Whirlwind

Antwort

2

Methode + nodeWithFileNamed: erstellt einen neuen Knoten durch Laden einer Archivdatei aus dem Hauptpaket des Spiels. Sie können es in dieser Situation also nicht verwenden.

Versuche so etwas wie diese (mit initWithFileNamed initializer):

#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 
+0

Danke für die schnelle Antwort! Irgendein Grund, dass dein Code nicht in meinem tatsächlichen Projekt funktioniert, aber ich testete es in neuem (leerem) Projekt und es funktionierte gut! Es stürzt sofort ab, wenn die Spielszene geladen wird ... irgendwelche Zweifel? – TeKo

+0

@TeKo Es funktioniert auch für mich ... Sie müssen genauer über den tatsächlichen Fehler sein. – Whirlwind

+0

heißt es: Beenden app aufgrund nicht abgefangene Ausnahme ‚com.apple.coreaudio.avfaudio‘ Grund: ‚erforderliche Bedingung ist falsch: _engine-> IsRunning()‘ – TeKo