2016-07-01 1 views
0

J'ai besoin d'aide avec mon meilleur score. Dans mon GameScene.swift j'ai mis les fonctions de Highscore mais le problème est que je voudrais montrer le Highscore dans mon GameOverScene.swift. Voici ce que je créé dans le GameScene.swift:Xcode Swift passe func à GameOverScene

func operateOnScore(score:NSInteger) { 
    if getBestScore() < GameScene.score { 
     setBestScore(GameScene.score) 
    } 
} 

func setBestScore(score:NSInteger){ 

    let userDefaults = NSUserDefaults.standardUserDefaults() 

    userDefaults.setObject(score, forKey: "bestscore") 

    userDefaults.synchronize() 
} 

func getBestScore() -> NSInteger { 
    let userDefaults = NSUserDefaults.standardUserDefaults() 
    return userDefaults.objectForKey("bestscore")!.integerValue 
    } 

Cela fonctionne assez bien si je le montre dans le GameScene.swift mais maintenant je voudrais montrer mon Highscore dans mon GameOverScene.swift. J'ai trouvé quelque chose sur la page d'accueil de développement d'Apple, mais cela ne fonctionne pas. Je mis également cette struct à mon GameScene.swift:

struct HS { 
func Showbest() { 

    let bestFinalText = SKLabelNode(fontNamed: "04b_19") 
    bestFinalText.fontSize = 20 
    bestFinalText.zPosition = 120 
    bestFinalText.fontColor = UIColor.blackColor() 
    bestFinalText.position = CGPointMake(CGRectGetMidX(self.frame)+90,CGRectGetMidY(self.frame)-10) 
    bestFinalText.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Right 
    bestFinalText.text = NSString(format: "%d", self.getBestScore()) as String 
    self.addChild(bestFinalText) 
} 

} 

Demandez à quelqu'un une idée comment je peux passer ma fonction à mon GameOverScene?

+0

si badically vous wan t partager des données entre deux fichiers swift? –

+0

@UmairAfzal Oui – Claudio13

Répondre

0

Vous n'avez pas besoin de faire une struct, tout simplement, vous pouvez créer un nouveau fichier appelé par exemple « Utils.swift » sans déclaration de classe:

Utils.swift (comme vous pouvez le voir il n'y a pas de classe déclaration):

import UIKit 
import SpriteKit 

func getBestScore() -> NSInteger { 
    let userDefaults = NSUserDefaults.standardUserDefaults() 
    return userDefaults.objectForKey("bestscore")!.integerValue 
} 

func showBest()->SKLabelNode { 
    let bestFinalText = SKLabelNode(fontNamed: "04b_19") 
    bestFinalText.fontSize = 20 
    bestFinalText.zPosition = 120 
    bestFinalText.fontColor = UIColor.blackColor() 
    bestFinalText.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Right 
    return bestFinalText 
} 

Swift il n'y a pas besoin d'importer des classes, si simplement lorsque vous êtes dans votre GameOverScene.swift appeler ces fonctions comme celui-ci par exemple:

let scoreLabel = showBest() 
scoreLabel.text = "points are: \(getBestScore())" 
scoreLabel.position = CGPointMake(CGRectGetMidX(self.frame)+90,CGRectGetMidY(self.frame)-10) 
self.addChild(scoreLabel) 
+0

Merci beaucoup pour ces informations et votre aide. Au moment où je reçois toujours une erreur Thread 1 (exc_bad_instruction). Que signifie cette erreur? – Claudio13

+0

Est arrivé quand un SKNode ou son dérivé (SKShapeNode, SKSpriteNode ..) est nul –

+0

Maintenant je ne reçois aucune erreur mais mon score est toujours 0. – Claudio13