2016-11-28 106 views
3

我一直在努力实现一种方法来添加按钮,并在按下场景时切换到我的第二个视图。我已经阅读过其他文章,但在Swift 3中已经有了ZERO运气。我非常困惑,并且已经尝试过但很多次都失败了。希望你能帮助!谢谢!以编程方式将按钮添加到GameScene.swift,并按下时转换场景

SpriteKit中的Swift 3。

+0

份额你已经尝试什么到目前为止请 –

回答

3

你是什么意思向新视图过渡?在制作SpriteKit游戏时,我们倾向于在S​​KScenes而不是视图之间切换。所以不要试图为每个场景创建不同的视图或viewControllers,只是直接在SKScenes之间切换。

关于按钮,有很多教程可用。您基本上创建一个SKSpriteNode作为按钮,并在touchesBegan中查找它,并在按下按钮时执行某些操作。

这是这里

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

必要,你可以创建一个类似的按钮子类的简单例子。

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,请在时间,因为我想给予好评的答案:-) –

+0

酷添加一些代码到你的答案,因为链接可能变得不可用,我现在就去看看。谢谢你提醒我 – crashoverride777

+0

对,做得好。 –