2016-11-28 3 views
3

Я работаю навсегда, пытаясь реализовать способ добавления кнопки и при нажатии перехода сцены на мой второй вид. Я читал другие сообщения, но имел ZERO удачу для чего-то в Swift 3. Я действительно смущен и пробовал, но не много раз. Надеюсь, ты поможешь! Благодаря!Добавление кнопки в GameScene.swift программно и переключение сцен при нажатии

Swift 3 in SpriteKit.

+0

доли того, что вы пытались до сих пор пожалуйста –

ответ

3

Что значит переход к новому виду ?. При создании игр SpriteKit мы склонны к переходу между SKScenes, а не просмотрами. Поэтому не пытайтесь создавать разные виды или viewControllers для каждой сцены, просто переход между SKScenes напрямую.

Что касается кнопок, доступно множество учебных пособий. Вы в основном создаете SKSpriteNode в качестве кнопки и ищите его в touchhesBegan и делаете что-то при нажатии.

Это простой пример здесь

https://nathandemick.com/2014/09/buttons-sprite-kit-using-swift/

Essential вы можете создать кнопку подкласс, подобную этой.

class Button: SKNode { 
     let defaultButton: SKSpriteNode 
     let activeButton: SKSpriteNode 
     var action:() ->() 

     init(defaultButtonImage: String, activeButtonImage: String, buttonAction: @escaping() ->()) { 
      defaultButton = SKSpriteNode(imageNamed: defaultButtonImage) 
      activeButton = SKSpriteNode(imageNamed: activeButtonImage) 
      activeButton.isHidden = true 
      action = buttonAction 

      super.init() 

      isUserInteractionEnabled = true 
      addChild(defaultButton) 
      addChild(activeButton) 
    } 

    required init(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemented") 
    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     activeButton.isHidden = false 
     defaultButton.isHidden = true 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
     for touch in touches { 
      let location = touch.location(in: self) 

      if defaultButton.contains(location) { 
        activeButton.isHidden = false 
        defaultButton.isHidden = true 
      } else { 
        activeButton.isHidden = true 
        defaultButton.isHidden = false 
      } 
     } 
    } 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
      for touch in touches { 
      let location = touch.location(in: self) 

      if defaultButton.contains(location) { 
       action() 
      } 

      activeButton.isHidden = true 
      defaultButton.isHidden = false 
     } 
    } 
} 

и чем в вашем соответствующем SKScene добавить свои кнопки

class StartScene: SKScene { 

     override func didMove(to view: SKView) { 

      let playButton = Button(defaultButtonImage: "button", activeButtonImage: "button_active", buttonAction: loadGameScene) 
      playButton.position = CGPoint(x: frame.midX, y: frame.midY) 
      addChild(playButton) 
     } 

     func loadGameScene() { 
      let scene = GameScene(...) 
      let transition = SKTransition.... 
      scene.scaleMode = .aspectFill 
      view?.presentScene(scene, transition: transition) 
     } 
} 

Вы также можете проверить яблоки образец игры DemoBots для другой кнопки класса, например с использованием протоколов.

Надеется, что это помогает

+0

Привет crashoverride777, пожалуйста, добавьте код в свой ответ, потому что ссылки могут стать недоступными во время и потому что я хочу, чтобы upvote ответа :-) –

+0

Прохладных , Я сейчас удушу. Спасибо, что напомнил мне – crashoverride777

+0

Хорошо, хорошо сделано. –

Смежные вопросы