ajouter un bouton trop la façon la plus simple est de détecter des touches sur votre sprite (s) dans le SKScene concerné.
enum NodeName: String {
case coloredSprite1
case coloredSprite2
}
class GameScene: SKScene {
let coloredSprite = SKSpriteNode(imageNamed: "YourImageName")
/// Scene setup
override func didMove(to view: SKView) {
// set up your colored sprite if necessary
// Give your sprites unique names to identify them
coloredSprite.name = NodeName.coloredSprite1.rawValue // always use enums for things like string identifiers so you avoid typos
}
/// Touches
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
let touchedNode = atPoint(location)
// Way 1 by node (probably less preferable)
switch touchedNode {
case coloredSprite:
// do something (e.g call loadScene method)
// see below
default:
break
}
// Way 2 by node name (probably more preferable)
// name is an optional so we have to unwrap it when using it in the switch statement.
// The easiest way is by providing an alternative string, by using the nil coalescing operator (?? "NoNodeNameFound")
switch touchedNode.name ?? "NoNodeNameFound" {
case NodeName.coloredSprite1.rawValue:
// do something (e.g call loadScene method)
// see below
default:
break
}
}
}
// Also call touchesEnded, touchesMoved and touchesCancelled and do necessary stuff
}
Pour une solution plus réutilisable, vous souhaitez idéalement créer une sous-classe de boutons. Il y a quelques tutoriels à google sur la façon de le faire.
Pour effectuer une transition entre SKScenes, vous pouvez créer une méthode loadScene dans chaque scène et les appeler si nécessaire.
// Start Scene
class StartScene: SKScene {
...
func loadGameScene() {
// If you do everything in code
let gameScene = GameScene(size: self.size)
view?.presentScene(gameScene, transition: ...)
// If you use SpriteKit scene editor
guard let gameScene = SKScene(fileNamed: "GameScene") else { return } // fileNamed is the name you gave the .sks file
view?.presentScene(gameScene, transition: ...)
}
}
// Game scene
class GameScene: SKScene {
....
func loadStartScene() {
// If you do everything in code
let startScene = StartScene(size: self.size)
view?.presentScene(startScene, transition: ...)
// If you use SpriteKit scene editor
guard let startScene = SKScene(fileNamed: "StartScene") else { return } // fileNamed is the name you gave the .sks file
view?.presentScene(startScene, transition: ...)
}
}
Hope this helps
Comment la scène précédente est-elle définie dans votre contrôleur de vue de jeu? –
[Transition à l'aide de l'initialiseur init (size :) standard] (http://stackoverflow.com/a/27935104/3402095), [Transition à l'aide de fileNamed: initialiseur de commodité] (http://stackoverflow.com/a/37394430/3402095), [Détecter quel nœud est exploité] (http://stackoverflow.com/a/41324936/3402095), [Bouton personnalisé et modèle de délégation] (http://stackoverflow.com/a/36524132/3402095), et dernier mais pas des moindres: [Comment poser une bonne question sur Stackoverflow] (https://stackoverflow.com/help/how-to-ask). – Whirlwind