我一直在努力尝试实现一种添加按钮的方法,当按下按钮时,场景会转换到我的第二个 View 。我读过其他帖子,但在 Swift 3 中的某些方面运气为零。我真的很困惑并且尝试过但失败了很多次。希望你能帮忙!谢谢!
SpriteKit 中的 Swift 3。
最佳答案
过渡到新 View 是什么意思?在制作 SpriteKit 游戏时,我们倾向于在 SKScenes 而不是 View 之间进行转换。所以不要尝试为每个场景创建不同的 View 或 View Controller ,直接在 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)
}
}
您还可以查看 Apple 示例游戏 DemoBots,了解另一个使用协议(protocol)的按钮类示例。
希望对你有帮助
关于swift - 以编程方式将按钮添加到 GameScene.swift 并在按下时转换场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40838579/