2016-06-11 3 views
0

Dans mon projet xcode, j'essaie de passer d'un SKScene à un autre. Ce qui déclenche la transition est le toucher d'un SKLabelNode. Tout cela fonctionne correctement. Mais après la scène ne change aucun de mon code de ma classe qui contrôle le "StartScence.sks" fonctionne. Il semble que mes "StartScene.swift" et mes "StartScene.sks" ne sont pas liés.Les fichiers SKScene et Swift ne sont pas liés

Voici le code dans mon GameScene,

import SpriteKit 

class GameScene: SKScene { 

var isTouched: Bool = false 
var booleanTouched: Bool! 
let ns = SKScene(fileNamed: "StartScene") 
let crosswf = SKTransition.crossFadeWithDuration(2) 


override func didMoveToView(view: SKView) { 


    let backgroundimage = SKSpriteNode(imageNamed: "ipbg") 
    backgroundimage.size = CGSize(width: self.frame.size.width, height: self.frame.size.height) 
    backgroundimage.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2) 
    addChild(backgroundimage) 

    let playButton = SKLabelNode(fontNamed: "") 
    playButton.name = "play" 
    playButton.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2 + 100) 
    playButton.text = "Play" 

    let wait = SKAction.waitForDuration(2) 
    let run = SKAction.runBlock({ 


     let randomNumber = Int(arc4random_uniform(UInt32(4))) 

     switch(randomNumber){ 

     case (0): 

      playButton.fontColor = UIColor.blueColor() 

     case 1: 

      playButton.fontColor = UIColor.yellowColor() 

     case 2: 

      playButton.fontColor = UIColor.purpleColor() 

     case 3: 

      playButton.fontColor = UIColor.orangeColor() 

     default: print("default") 


     } 

    }) 

    addChild(playButton) 
    var repeatActionForever = SKAction.repeatActionForever(SKAction.sequence([wait, run])) 
    runAction(repeatActionForever) 
    backgroundimage.zPosition = 1 
    playButton.zPosition = 2 



} 

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

    let touch = touches.first! as UITouch 
    let touchLocation = touch.locationInNode(self) 
    let touchedNode = nodeAtPoint(touchLocation) 


    if (touchedNode.name == "play"){ 

     scene!.view?.presentScene(ns!, transition: crosswf) 

    }else{ 


    } 


} 

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

}

Et voici le code qui est mon "StartScene.swift" qui nest pas le contrôle des "StartScene.sks" correctement.

import SpriteKit 

class StartScene: SKScene { 


override func didMoveToView(view: SKView) { 


    print("Scene Loaded") 

} 

} 

Répondre

2

Il y a deux choses à connaître.

  1. Dans votre code vous chargez actuellement votre .SKS fichier comme celui-ci

    let ns = SKScene(fileNamed: "StartScene") 
    

Votre nouvelle scène se chargera, comme tous SKS Les fichiers sont de la classe SKScene. Mais, il utilisera seulement le code de cette classe.

Si vous voulez le charger avec le code dans votre classe StartScene, une sous-classe de SKScene. Modifiez la ligne à ce

let ns = StartScene(fileNamed: "StartScene") 
  1. Nous pouvons également rendre le fichier SKS ont une classe personnalisée au lieu de défaut est SKScene. Donc, quand il est chargé, il utilise une classe personnalisée. Ouvrez le fichier SKS dans Xcode pour donner à la scène une classe personnalisée.

Dans l'éditeur de scène et avec rien sélectionné. Cliquez dans la zone des utilitaires, passez à l'inspecteur de classe personnalisé, qui est le dernier onglet sur la droite.

Donnez-lui une classe personnalisée de StartScene.

Cela devrait fonctionner.