2017-06-16 6 views
0

J'ai deux scènes que je veux permuter. Sur chaque scène, il y a un bouton qui passe à l'autre scène, et j'aimerais que le bouton soit au milieu de l'écran. Pour la première scène cela fonctionne (je mets le bouton à 0,0). Mais pour la deuxième scène, le point d'ancrage de 0,0 est en bas à gauche au lieu de au centre .. et étrangement, en revenant à la première scène, le bouton apparaît à gauche du bouton, même s'il était centré avant!Swift: Spritekit: Scènes de commutation (point d'ancrage?)

  • scène 1: Bouton centré
  • scene 2: @bottom bouton gauche
  • scène 1: @bottom bouton gauche
  • scene 2: @bottom bouton gauche
  • scène 1: bouton @bottom gauche
  • etc ..

est le code ici (code est identique pour les deux scènes, autre que la scène na mes)

class LevelGeneral: SKScene { 
    var buttonplay = SKSpriteNode() 

    override func didMove(to view: SKView) { 

     buttonplay = SKSpriteNode(imageNamed: "button1") 
     buttonplay.size = CGSize(width: self.frame.width/2, height: self.frame.height/8) 
     buttonplay.position = CGPoint(x: 0, y: 0) 
     self.addChild(buttonplay) 

    } 
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     for touch in touches { 
      let location = touch.location(in: self) 
      if buttonplay.contains(location) { 
       let nextScene = GameScene(size: self.size) 
       let reveal = SKTransition.fade(withDuration: 0.1) 
       self.view?.presentScene(nextScene,transition: reveal) 
      } 
     } 
    } 
} 

si je change la position du bouton pour être screenwidth/2, screenheight/2 (dans les deux scènes), le bouton apparaît dans le coin supérieur droit au début, et par la suite centrée. toute aide serait appréciée

+0

Quel est le code de la deuxième scène ? – bearacuda13

+0

Pourquoi ne pas utiliser buttonPlay.position à la place? – sicvayne

+0

code pour la deuxième scène est identique à la première, mais "niveau général" et "GameScene" sont commutés – mdamkani

Répondre

1

En effet, LevelGeneral est faite avec un fichier SKS avec point d'ancrage par défaut de 0.5,0.5 et « GameScene » est fait par le code de la taille self.size avec un point d'ancrage de 0,0, 0,0. Vous devriez essayer de rester cohérent avec la façon dont vous chargez les scènes. Personnellement, vous devriez vous habituer à la mentalité de séparer le design de la fonction. Construire comme tout semble dans l'éditeur SpriteKit, et vous n'aurez jamais à deviner pourquoi les choses n'apparaissent pas où elles devraient être (à moins que certaines fonctions ne le font pas apparaître où il devrait être)

+0

prendra votre avis, en attendant, corrigé en ajoutant la ligne: nextScene.anchorPoint = CGPoint (x: 0.5, y: 0.5) avant le chargement – mdamkani