背景图像在Swift中不改变

背景图像在Swift中不改变,swift,xcode,unity3d,sprite-kit,sknode,Swift,Xcode,Unity3d,Sprite Kit,Sknode,所以基本上我是想让这个应用程序在按下按钮时改变背景。我尝试这样做的方式是设置一个变量0,如果按下按钮,它将使它变小或变大。目前,如果我手动更改类中的变量,背景确实会更改,但当我尝试使用按钮时,背景不会更改 这是我更改背景的代码 /////////////////////////////////////////////////// let gameVC = SelectCharViewController() override func didMove(to view

所以基本上我是想让这个应用程序在按下按钮时改变背景。我尝试这样做的方式是设置一个变量0,如果按下按钮,它将使它变小或变大。目前,如果我手动更改类中的变量,背景确实会更改,但当我尝试使用按钮时,背景不会更改

这是我更改背景的代码 ///////////////////////////////////////////////////

 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, height: frame.size.height)
            backgroundImage.position = CGPoint(x: frame.midX, 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:)
,即

要使其在按下按钮时工作,您可以将该代码移动到自己的函数中,如下所示:

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, height: frame.size.height)
            backgroundImage.position = CGPoint(x: frame.midX, y: frame.midY)
            backgroundImage.zPosition = -1
            addChild(backgroundImage)
        }
}
struct Something {
    static var scene = GameScene()
}
Something.scene.changeBackground(backgroundCheck2: 1)
然后,从按钮逻辑调用
changeBackground(backgroundCheck2:)
,无论在哪里

您将需要场景的单个实例。大概是这样的:

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, height: frame.size.height)
            backgroundImage.position = CGPoint(x: frame.midX, y: frame.midY)
            backgroundImage.zPosition = -1
            addChild(backgroundImage)
        }
}
struct Something {
    static var scene = GameScene()
}
Something.scene.changeBackground(backgroundCheck2: 1)
因此,在这种情况下,您可以这样调用函数:

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, height: frame.size.height)
            backgroundImage.position = CGPoint(x: frame.midX, y: frame.midY)
            backgroundImage.zPosition = -1
            addChild(backgroundImage)
        }
}
struct Something {
    static var scene = GameScene()
}
Something.scene.changeBackground(backgroundCheck2: 1)

为什么要使用UIKit中的按钮来更改Sprite工具包中的某些内容?你想做的没有意义。