创建的按钮出现在游戏中的其他场景



//按钮类别

class Button: UIButton {

override init(frame: CGRect){
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setup(){
backgroundColor = #colorLiteral(red: 0.1215686277, green: 0.01176470611, blue: 0.4235294163, alpha: 1)
layer.cornerRadius = 12
layer.masksToBounds = false
translatesAutoresizingMaskIntoConstraints = false
}

}

//创建按钮对象的类

struct Question {问题:字符串!var answer: [String]!var AnswerNumber: Int!}

类LevelOne: SKScene {

var button = Button()
var buttons = [Button]()
let Question_met = UILabel(frame: CGRect(x: 0.3, y: 0.3, width: 40, height: 21))
var Questions = [Question]()
var QNumber = Int()
var buttonNames = [""]
var AnsNumber = Int()
let selectors:[Selector] = [#selector(handleButton1), #selector(handleButton2), #selector(handleButton3),#selector(handleButton4)]
override func didMove(to view: SKView) {

let background = SKSpriteNode(imageNamed: "background")
background.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
background.zPosition = 0
self.addChild(background)

questionFunction()

buttonFuction()

pickQuestion()

}
@objc func questionFunction(){

Questions = [Question(Question: "What is a BMW ?", Answers: ["Bat","Cat","Vehicle","Pat"], AnswerNumber: 2),
Question(Question: "What is a Boeing ?", Answers: ["Bat","Aircraft","Cat","Pat"], AnswerNumber: 1),
Question(Question: "What is a Ant ?", Answers: ["Insect","Cat","Insect","Nate"], AnswerNumber: 2),
Question(Question: "What is a Apple ?", Answers: ["Fruit","Cat","bat","Pat"], AnswerNumber: 0),
Question(Question: "Where is london ?", Answers: ["UK","USA","France","Germany"], AnswerNumber: 0),
Question(Question: "Where is New York ?", Answers: ["Canada","USA","France","Germany"], AnswerNumber: 2),
Question(Question: "where is Berlin ?", Answers: ["UK","USA","Italy","Germany "], AnswerNumber: 3),
Question(Question: "Where is Toronto ?", Answers: ["India","Africa","Canada","Norway"], AnswerNumber: 2),
Question(Question: "Where is Rome ?", Answers: ["Japan","China","Italy","Ireland"], AnswerNumber: 2),
Question(Question: "where is Chennai ?", Answers: ["India","Brazil","Swiss","Germany"], AnswerNumber: 0),]

Question_met.frame = CGRect(x: 330, y: 70, width: 200, height: 21)
Question_met.backgroundColor = UIColor.orange
Question_met.textColor = UIColor.white
Question_met.textAlignment = NSTextAlignment.center
Question_met.text = "What caused Global Warming ?"
self.view?.addSubview(Question_met)

}
@objc func buttonFuction(){

let stacView = UIStackView()
stacView.spacing = 12
stacView.distribution = .fillEqually
stacView.axis = .horizontal
stacView.translatesAutoresizingMaskIntoConstraints = false
view!.addSubview(stacView)

buttonNames = ["One","Two","Three","Four"]

for i in 0..<4{

button = Button()
button.setTitle(buttonNames[i], for: .normal)
stacView.addArrangedSubview(button)
buttons.append(button)
button.addTarget(self, action: selectors[i], for: .touchUpInside)

}
NSLayoutConstraint.activate([stacView.centerXAnchor.constraint(equalTo: view!.centerXAnchor),stacView.centerYAnchor.constraint(equalTo: view!.centerYAnchor),stacView.widthAnchor.constraint(equalToConstant: 350),stacView.heightAnchor.constraint(equalToConstant:70)])

}
@objc func pickQuestion(){

if Questions.count > 0{
QNumber = 0
Question_met.text = Questions[QNumber].Question

AnsNumber = Questions[QNumber].AnswerNumber

for i in 0..<buttons.count{
buttons[i].setTitle(Questions[QNumber].Answers[i], for: .normal)
}
Questions.remove(at: QNumber)
}
else {
print("Done!")

let sceneToMoveTo = Instructions(size: self.size)
sceneToMoveTo.scaleMode = self.scaleMode
let myTransition = SKTransition.fade(withDuration: 0.5)
self.view!.presentScene(sceneToMoveTo, transition: myTransition)

}
}
@objc func handleButton1() {

if AnsNumber == 0 {
pickQuestion()
print("Correct!")
}

else {
print("You are Wrong!!!")
}
}
@objc func handleButton2(){

if AnsNumber == 1 {
pickQuestion()
print("Correct!")
}

else {
print("You are Wrong!!!")
}

}
@objc func handleButton3(){

if AnsNumber == 2 {
pickQuestion()
print("Correct!")
}

else {
print("You are Wrong!!!")

}

}
@objc func handleButton4(){

if AnsNumber == 3 {
pickQuestion()
print("Correct!")
}

else {
print("You are Wrong!!!")
}

}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

}

}

我目前正在开发一款游戏,包含各种关卡和菜单场景。当前关卡创建了一个问题标签和答案按钮,即使在关卡完成后,你导航到另一个场景,按钮和问题仍然在场景上,无论你导航到哪个场景。

我希望得到一个解决方案,只有按钮和标签出现在指定的场景,不出现在其他场景,除非说明。

提前谢谢你。

我认为你没有理解这里的所有权模型。ViewController拥有它的视图。视图拥有SKView而SKView拥有SKScene。有一个从SKScene到它的SKView的反向指针,你正在使用它来添加一个UIKit StakcView到Scene的父视图。因为UIKit位于SKScene的顶部,你的按钮总是可见的。正确的架构是视图应该添加和管理它自己的子视图。每当它加载一个新的SKScene时,它应该确定场景需要什么UI,然后隐藏任何不应该显示的UI。您可以通过在相关视图上设置. ishidden来实现。

相关内容

  • 没有找到相关文章

最新更新