2016-04-29 16 views
1

Ich versuche, zufällige Sounds in einem Spielmenü zu spielen, es ist tatsächlich Vögel fiepsen. So gibt es viele Vogel-Sounds, aber ich möchte, dass sie randomisiert werden.Schedule Audio in SpriteKit - Swift

this->schedule(schedule_selector(HelloWorld::birdsound),3.2); 

Wo:

Ich habe vorher diese mit schedule entlang der Linien von getan

void HelloWorld::birdsound(){ 
    int soundnum=arc4random()%9+1; 

    switch (soundnum) { 
     case 1: 
      appdelegate->bird1(); 
      break; 
     case 2: 
      appdelegate->bird2(); 
      break; 
      . 
      . 
      . 
     case 9: 
      appdelegate->bird9(); 
      break; 
     default: 
      break; 
    } 
} 

So den zufälligen Klang zB spielen, bird1():

void AppDelegate::bird1(){ 
    CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects(); 
    CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("bird1.mp3"); 

}

Wie kann ich etwas ähnliches in Spritekit/swift implementieren, wo ich X Menge an Soundfiles (oder Vogel fiepst) in zufälliger Reihenfolge mit einer kleinen Lücke (oder warten) dazwischen haben kann? Kann dies mit SKActions getan werden?

Antwort

0

Mit SKAction Ich setzte es wie folgt aus:

Last klingt:

let cheep1 = SKAction.playSoundFileNamed("bird1.mp3", waitForCompletion: false) 
//and so on 

eine Wartezeit erstellen und für immer Sequenz nennen:

func beginRandomCheeping(){ 
    let sequence = (SKAction.sequence([ 
     SKAction.waitForDuration(2.0), 
     SKAction.runBlock(self.playRandomSound) 
    ])) 

    let repeatThis = SKAction.repeatActionForever(sequence) 
    runAction(repeatThis) 
} 

randomise Ton und Spiel:

func playRandomSound() { 
    let number = Int(arc4random_uniform(UInt32(9))) 

    switch (number){ 
    case 1: 
     runAction(cheep1) 
     break 
    case 2: 
     runAction(cheep2) 
     break 
     . 
     . 
     . 
    case 9: 
     runAction(cheep9) 
     break 
    default: 
     break 
    } 
} 

Und rufen Sie einfach self. beginRandomCheeping() irgendwo in der Spiellogik.

0

Sie können die Audiodateien in ein Array einfügen, einen Audioplayer einrichten und dann eine Funktion erstellen, die die Sounds nach dem Zufallsprinzip abspielt. Verwenden Sie dann einen Timer, der die Funktion in dem gewünschten Zeitintervall aufruft. Also:

Class GameScene { 
    var soundFiles = ["bird_sound1", "bird_sound2"] 
    var audioPlayer: AVAudioPlayer = AVAudioPlayer() 

func setupAudioPlayer(file: NSString, type: NSString){ 
    let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String) 
    let url = NSURL.fileURLWithPath(path!) 
     do { 
      try audioPlayer = AVAudioPlayer(contentsOfURL: url) 
     } 
      catch { 
      print("Player not available") 
     } 
    } 

func playRandomSound() { 
    let range: UInt32 = UInt32(soundFiles.count) 
    let number = Int(arc4random_uniform(range)) 

    self.setupAudioPlayer(soundFiles[number], type: "wav") 

    self.audioPlayer.play() 
} 

override func didMoveToView(view: SKView) { 
    _ = NSTimer.scheduledTimerWithTimeInterval(7, target: self, selector: #selector(GameScene.playRandomSound), userInfo: nil, repeats: true) 

} 
Verwandte Themen