我是 swift 的新手,并且有一个 SKScene,我在其中创建了一个游戏。但是,我似乎无法弄清楚如何构建菜单。如果看到创建另一个 View Controller 或另一个 SKScene 的两种解决方案,但它们都非常困惑和复杂。我愿意使用这些方法或任何其他方法,有没有人有解决这个问题的技巧。一些代码会有所帮助。感谢您的帮助。
最佳答案
在 Sprite-Kit 中有很多方法可以获取菜单。
通常人们会绘制一些SKLabelNode
,或者SKSpriteNode
来构建菜单声音,或者制作一个特定的SKNode
来构建这种结构。
但我想听从有关 StackView
评论的建议。
我们知道 StackView
是一个 UIKit
元素:
Provides a streamlined interface for laying out a collection of views in either a column or a row.
因此,我们可以构建一个包含所有菜单声音的垂直 StackView
(附:下面的代码显示了一个简单的标签集合,您可以自定义您的 StackView
View 你希望):
import SpriteKit
import UIKit
protocol StackViewDelegate: class {
func didTapOnView(at index: Int)
}
class GameMenuView: UIStackView {
weak var delegate: StackViewDelegate?
override init(frame: CGRect) {
super.init(frame: frame)
self.axis = .vertical
self.distribution = .fillEqually
self.alignment = .fill
self.spacing = 5
self.isUserInteractionEnabled = true
//set up a label
for i in 1...5 {
let label = UILabel()
label.text = "Menu voice \(i)"
label.textColor = UIColor.white
label.backgroundColor = UIColor.blue
label.textAlignment = .center
label.tag = i
self.addArrangedSubview(label)
}
configureTapGestures()
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func configureTapGestures() {
arrangedSubviews.forEach { view in
view.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapOnView))
view.addGestureRecognizer(tapGesture)
}
}
func didTapOnView(_ gestureRecognizer: UIGestureRecognizer) {
if let index = arrangedSubviews.index(of: gestureRecognizer.view!) {
delegate?.didTapOnView(at: index)
}
}
}
class GameScene: SKScene, StackViewDelegate {
var gameMenuView = GameMenuView()
private var label : SKLabelNode?
override func didMove(to view: SKView) {
self.label = self.childNode(withName: "//helloLabel") as? SKLabelNode
if let label = self.label {
label.alpha = 0.0
label.run(SKAction.fadeIn(withDuration: 2.0))
}
// Menu setup with stackView
gameMenuView.frame=CGRect(x:20,y:50,width:280,height:200)
view.addSubview(gameMenuView)
gameMenuView.delegate = self
}
func didTapOnView(at index: Int) {
switch index {
case 0: print("tapped voice 1")
case 1: print("tapped voice 2")
case 2: print("tapped voice 3")
case 3: print("tapped voice 4")
case 4: print("tapped voice 5")
default:break
}
}
}
输出:
关于ios - 使用 spritekit swift 在 swift 中创建游戏主菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755518/