2016-03-19 1 views
0

J'utilise Xcode 7.2.1 et je suis tout nouveau chez Swift.Jeu SpriteKit Swift 2.0: Boutons et nœuds dans plusieurs scènes

J'ai une scène avec un bouton en haut qui lit et met en pause la musique. Comment rendre ce bouton disponible dans plusieurs scènes? Je voudrais sur ce bouton pour apparaître sur toutes mes scènes (menu, sélectionnez le niveau, jeu ...)

code du contrôleur de vue du jeu:

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") } 
    } 

et la scène qui maintient le bouton Pause/Lecture, ainsi que ce qu'il faut faire quand il est pressé est:

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 */ 
} 
} 

Comment puis-je prendre toutes les informations contenues dans cette scène (un bouton de travail) et le rendre disponible à d'autres scènes sans copier coller? Comment puis-je chevaucher deux scènes essentiellement? Merci d'avance.

Répondre

0

La méthode la plus simple consiste à créer le bouton dans le view-controller, soit par programmation, soit dans le constructeur de l'interface. Parce que toutes les scènes tournent dans le même view-controller. Il suffit donc de faire glisser un bouton depuis le constructeur de l'interface, de lui donner une belle mise en page et de lui connecter une fonction dans la classe viewcontroller.

Puis à l'intérieur de cette fonction, exécutez le code pour mettre en pause/lire l'audio.

+0

Comment est-ce que je fais par programme? Je reçois des erreurs sans fin. le GameViewController n'aime pas SKSpriteNodes (attend UIView?), n'a pas de membre "frame", ne peut pas utiliser self.addchild(), la fonction touchesbegan a des erreurs .. – mdamkani

+1

c'est parce que SkSpriteNode est un objet SkScene, à faire un bouton régulier utiliser UIButton. Le plus simple est d'accéder à votre storyboard et de faire glisser un bouton sur votre viewcontroller. Si vous ne l'avez pas déjà fait, recherchez un didacticiel sur la création d'une application à un seul bouton. Ou si vous voulez le faire par programme (je ne devrais pas le faire si vous n'avez pas à le faire), je peux vous donner un exemple de code. – Eric