2017-10-12 7 views
0

Ci-dessous, j'ai deux façons et demie de configurer mon jeu en utilisant les contrôleurs de vue et SKScene. La moitié, je n'ai pas encore mis autant de temps que j'espère que l'une de ces autres solutions fonctionnera. décrit plus en détail ci-dessous sont:Utilisation de plusieurs ViewControllers et SKScene dans Swift

  1. MainViewController -> GameViewController (détient le SKScene)
  2. GameViewController (détient le SKScene) - En utilisant les protocoles

0,5 Deux SKScenes/Deux classes personnalisées rapides.

Numéro 1

MainViewController -> GameViewController (détient le SKScene)

lorsque le jeu est terminé dans le SKScene - Je veux rejeter GameViewController et revenir à MainViewController.

Je n'ai pas eu de chance pour que cela fonctionne. J'ai essayé de rejeter le contrôleur de vue et le plus proche, je suis venu est rejeté la SKScene en utilisant quelque chose comme (dans SKScene:

self.view?presentScene(nil) 

ou

self.dismiss(animated: false, completion: nil) 
self.presentingViewController?.dismiss(animated: false, completion: nil) 

mais je suis incapable de revenir à . le MainViewController J'ai essayé de créer une référence à la GameViewController pour la pop comme:.

weak var gameViewController:GameViewController? = GameViewController() 

Malheureusement, je suis incapable de trouver les fonctions de rejeter correctement

Après beaucoup de recherche sans trouver de réponse, j'ai pensé que j'essaierais une méthode différente.

Numéro 2

GameViewController (détient le SKView) puis ont le GVC maintenez les boutons et les étiquettes que je voulais et montrer la scène sur le dessus. Ce fut un échec car les boutons et les étiquettes n'ont pas de zPositions et sont apparus en haut de la scène. J'ai essayé de faire .isHidden = true sur eux avant d'appeler la scène et cela a semblé fonctionner, mais quand je rejette la scène et tente de les changer en .isHidden = false (essayé en utilisant des protocoles), je ne pouvais pas le faire fonctionner. (se passait de ce que stvn décrit How to reference the current view controller from a sprite kit scene)

Je soupçonne que cette deuxième façon pourrait être un bon moyen de le faire mais peut-être que je ne l'approche pas correctement.

Numéro 0,5

finalement ce que je pense maintenant est de faire juste la deuxième scène de « flip » et-vient entre les deux. Je crois que c'est la manière recommandée de le faire mais je ne suis pas vraiment sûr de la façon de l'aborder. Si j'ai fait cette version. Je voudrais avoir un gameScene.swift/gameScene.sks pour chaque vue (peut-être en utilisant quelque chose comme presenting a uiviewcontroller for skscene.

Je préférerais la première façon d'avoir deux contrôleurs de vue car je pense que la mise en page pour mon jeu serait beaucoup plus facile à faire en utilisant quelques contrôleurs de vue.
Ma méthode la moins préférée est celle de plusieurs scènes car je ne suis pas géniale avec le kit de sprite et les maths pour tout mettre en page.

La première méthode est-elle encore possible? Si oui, toutes les suggestions seraient bonnes. Sinon, quelle serait la manière recommandée de le faire?

Répondre

0

Dans la méthode 1, si votre MainViewController est un UINavigationController, vous ne devriez avoir aucun problème à pousser et à faire sauter les autres ViewControllers dont vous avez besoin.

par exemple. dans GameViewController:

self.navigationController!.popViewController(animated: true)