2016-03-19 9 views
0

Ich benutze Xcode 7.2.1 und bin neu zu Swift.SpriteKit Swift 2.0 Spiel: Buttons & Nodes über mehrere Szenen hinweg

Ich habe eine Szene mit einer Taste an der Spitze, die Musik spielt und pausiert. Wie stelle ich diese Schaltfläche in mehreren Szenen zur Verfügung? Ich möchte diese Taste auf alle meine Szenen erscheinen (Menü, Ebene wählen, Spiel ...)

Spiel-View-Controller-Code:

let filePath = NSBundle.mainBundle().pathForResource("gametrack1", ofType: "mp3")   
if let filePath = filePath { 
    let fileURL = NSURL(fileURLWithPath: filePath) 
     do{ 
      try AudioPlayer = AVAudioPlayer(contentsOfURL: fileURL) 
      AudioPlayer.play() 
     }catch 
     { print("error") } 
    } 

und die Szene, die die Pause/Play-Taste hält, zusammen mit dem, was zu tun ist, wenn es gedrückt lautet:

import Foundation 
import SpriteKit 
import AVFoundation 

class PlayPauseOverlay: SKScene {  

var buttonPlayPause = SKSpriteNode()  

override func didMoveToView(view: SKView) { 

    if musicPlaying == true 
    { buttonPlayPause = SKSpriteNode(imageNamed: "buttonPause") } else 
    { buttonPlayPause = SKSpriteNode(imageNamed: "buttonPlay") } 
    buttonPlayPause.size = CGSizeMake(50, 50) 
    buttonPlayPause.position = CGPoint(x: self.frame.width/2, y: self.frame.height - 50) 
    self.addChild(buttonPlayPause) 


} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    for touch: AnyObject in touches { 

     let location = touch.locationInNode(self) 

     if buttonPlayPause.containsPoint(location) { 

      if musicPlaying == true{ 
       //we want to pause and show a play button 
       musicPlaying = false 
       buttonPlayPause.texture = SKTexture(imageNamed: "buttonPlay") 
       print("pause") 
       AudioPlayer.pause() 
      }else{ 
       musicPlaying = true 
       buttonPlayPause.texture = SKTexture(imageNamed: "buttonPause") 
       print("play") 
       AudioPlayer.play() 
      } 
     }else{ ... } 
    } 
} 

override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
} 
} 

Wie nehme ich alle Informationen in dieser Szene (eine Arbeitstaste) und an anderen Szenen ohne Kopie zur Verfügung stellen einfügen? Wie überschneide ich grundsätzlich zwei Szenen? Danke im Voraus.

Antwort

0

Der einfachste Weg zu erreichen ist, die Schaltfläche im View-Controller entweder programmgesteuert oder im Interface Builder zu erstellen. Weil alle Szenen im selben View-Controller laufen. Ziehen Sie einfach eine Schaltfläche aus dem Interface Builder, geben Sie ihr ein schönes Layout und verbinden Sie eine Funktion in Ihrer ViewController-Klasse.

Dann innerhalb dieser Funktion den Code ausführen, um das Audio anzuhalten/abzuspielen.

+0

Wie programmiere ich dies? Ich bekomme endlose Fehler. der GameViewController mag SKSpriteNodes nicht (erwartet UIView?), hat kein Member "frame", kann self.addchild() nicht verwenden, die touchsbegan-Funktion hat Fehler. – mdamkani

+1

das ist, weil SkSpriteNode ein SkScene-Objekt ist Verwenden Sie eine normale Schaltfläche UIButton. Der einfachste Weg ist, zu Ihrem Storyboard zu gehen und eine Schaltfläche auf den Viewcontroller zu ziehen. Wenn Sie dies noch nicht getan haben, suchen Sie einfach nach einem Tutorial zum Erstellen einer einfachen Ein-Tasten-App. Oder wenn Sie es programmatisch machen wollen (ich sollte es nicht tun, wenn Sie nicht müssen), kann ich Ihnen ein Codebeispiel geben. – Eric

Verwandte Themen