问题描述
所以基本上我试图让这个应用程序在按下按钮时改变它的背景。我尝试这样做的方法是将变量设置为 0,如果按下按钮,它将减少 1 或增加 1。目前,如果我手动更改类中的变量,背景确实会改变,但当我尝试使用按钮时,背景不会改变。
这是我更改背景的代码 ///////////////////////////////////////////////// /
let gameVC = SelectCharViewController()
override func didMove(to view: SKView) {
let backgroundCheck2 = gameVC.getter()
physicsWorld.contactDelegate = self
// var backgroundImage = SKSpriteNode(imageNamed: "background")
if(backgroundCheck2 == 0){
let backgroundImage = SKSpriteNode(imageNamed: "background")
backgroundImage.size = CGSize(width: frame.size.width,height: frame.size.height)
backgroundImage.position = CGPoint(x: frame.midX,y: frame.midY)
backgroundImage.zPosition = -1
addChild(backgroundImage)
}
else{
let backgroundImage = SKSpriteNode(imageNamed: "background2")
backgroundImage.size = CGSize(width: frame.size.width,y: frame.midY)
backgroundImage.zPosition = -1
addChild(backgroundImage)
}
这是我的按钮代码
import UIKit
class SelectCharViewController: UIViewController {
public var backgroundCheck = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func nightShift(_sender: UIButton){
print(backgroundCheck)
self.backgroundCheck+=1;
print(backgroundCheck)
}
@IBAction func dayShift(_sender: UIButton){
print(backgroundCheck)
self.backgroundCheck-=1;
print(backgroundCheck)
}
func getter() -> Int{
return self.backgroundCheck
}
/*
// MARK: - Navigation
// In a storyboard-based application,you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
解决方法
可能有很多事情你可以做不同的事情(例如,使用布尔值而不是整数)。
但我怀疑您没有看到所需的行为,因为您的图像更改代码位于 didMove(to:)
,即 only called when the scene is first presented。
要使其在按下按钮时工作,您可以将该代码移动到您自己的函数中,如下所示:
func changeBackground(backgroundCheck2: Int) {
if backgroundCheck2 == 0 {
let backgroundImage = SKSpriteNode(imageNamed: "background")
backgroundImage.size = CGSize(width: frame.size.width,height: frame.size.height)
backgroundImage.position = CGPoint(x: frame.midX,y: frame.midY)
backgroundImage.zPosition = -1
addChild(backgroundImage)
} else {
let backgroundImage = SKSpriteNode(imageNamed: "background2")
backgroundImage.size = CGSize(width: frame.size.width,y: frame.midY)
backgroundImage.zPosition = -1
addChild(backgroundImage)
}
}
然后,从您的按钮逻辑中调用 changeBackground(backgroundCheck2:)
,无论在哪里。
您需要一个场景实例。像这样:
struct Something {
static var scene = GameScene()
}
因此,在这种情况下,您可以这样调用您的函数:
Something.scene.changeBackground(backgroundCheck2: 1)