微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

背景图像在 Swift 中没有改变

如何解决背景图像在 Swift 中没有改变

所以基本上我试图让这个应用程序在按下按钮时改变它的背景。我尝试这样做的方法是将变量设置为 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。