我一直在努力实现一种添加按钮的方法,当按下时,场景转换到我的第二个视图。我已经阅读了其他帖子,但是在Swift 3中有一些零运气。我真的很困惑并尝试但多次失败。希望你能帮忙!谢谢!
SpriteKit中的Swift 3。
答案 0 :(得分:3)
你是什么意思转换到新视图?在制作SpriteKit游戏时,我们倾向于在SKScenes之间转换而不是视图。因此,不要尝试为每个场景创建不同的视图或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)
}
}
您还可以使用协议查看Apples示例游戏DemoBots以获取另一个按钮类示例。
希望这有帮助