J'ai construit un jeu en utilisant SpriteKit et je l'ai pleinement fonctionnelle, sauf pour obtenir l'utilisateur d'entrer leur nom pour stocker avec leurs meilleurs scores. J'utilise NSUserDefaults pour stocker les scores sous la forme d'un tableau de leurs 5 meilleurs scores. Je voudrais enregistrer leur nom et parce que finalement je prévois de déplacer le stockage vers un serveur au lieu de NSUserDefaults pour permettre aux joueurs de concourir pour des scores élevés.Swift iOS: Comment puis-je obtenir le nom du joueur dans SpriteKit?
Mon idée était de présenter un UIAlertController lorsque le jeu tourne pour la première fois sur l'appareil, de saisir son nom via un champ de saisie de texte, puis de le stocker dans NSUserDefaults. Mais peu importe où je mets le code pour UIAlertController (GameScene.swift, GameViewController.swift, et même AppDelegate.swift), il ne sort pas.
Le code que je utilise pour l'alerte:
let ac = UIAlertController(title: "Enter Name", message: nil, preferredStyle: .Alert)
ac.addTextFieldWithConfigurationHandler(nil)
ac.addAction(UIAlertAction(title: "OK", style: .Default) { [unowned self, ac] _ in
let playerName = ac.textFields![0]
})
ac.presentViewController(ac, animated: true, completion: nil)
C'est le code mis à jour en fonction des commentaires ci-dessous, y compris l'ensemble de la fonction viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let ac = UIAlertController(title: "Enter Name", message: nil, preferredStyle: .Alert)
ac.addTextFieldWithConfigurationHandler(nil)
ac.addAction(UIAlertAction(title: "OK", style: .Default) { [unowned self, ac] _ in
let playerName = ac.textFields![0]
})
self.presentViewController(ac, animated: true, completion: nil)
if let scene = GameScene(fileNamed:"GameScene") {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
currentGame = scene
scene.viewController = self
}
}
Quand je le change en auto, il ne bloque plus l'application, mais il n'affiche pas le viewcontroller d'alerte, et il me donne cette erreur: Tentative de présenter sur dont la vue n'est pas dans la hiérarchie de la fenêtre! –
Ce message d'erreur indique que le GameViewController ne montre pas à l'écran lorsque vous appelez 'presentViewController'. Où est ce code dans votre classe 'GameViewController'? – Deyton
Merci pour votre aide! Je l'ai essayé avant et après la création de la scène. Je posterai le code dans un autre commentaire car il ne me laissera pas le poster ici. –