在 SKScene 中隐藏和取消隐藏按钮
Posted
技术标签:
【中文标题】在 SKScene 中隐藏和取消隐藏按钮【英文标题】:Hide and unhide buttons in a SKScene 【发布时间】:2017-07-12 23:11:53 【问题描述】:在我使用 Swift 开发的游戏中,我有一个 SKScene,玩家可以在其中查看不同的背景以从中进行选择。背景填充在后面,并且有一些按钮可以让人们看到下一个或上一个背景。我已经测试了一个“选择”按钮,它可以保存当前背景并转换到游戏场景。现在我想根据背景显示不同的“选择”按钮,每个按钮将显示不同的价格,并且会从玩家的硬币中减去不同的金额。
当玩家点击“下一个”和“上一个”按钮时,我的代码目前可以改变背面。但是我无法显示每个背面的“选择”按钮。这是我的代码的相关部分:
import SpriteKit
class ShopScene: SKScene
var backNumber = 100
var backRemainder = 0
var background = SKSpriteNode()
var coinNumber = UserDefaults.standard.integer(forKey: "coinSaved")
var backName:String? = UserDefaults.standard.string(forKey: "backSaved")
override func didMove(to view: SKView)
if backName != nil
backName = UserDefaults.standard.string(forKey: "backSaved")
else
backName = "back1"
background.texture = SKTexture(imageNamed: "\(backName!)")
self.addChild(background)
let nextButton: NButton = NButton(defaultButtonImage: "next", activeButtonImage: "nextP", buttonAction: nextAction)
addChild(nextButton)
let previousButton: PButton = PButton(defaultButtonImage: "previous", activeButtonImage: "previousP", buttonAction: previousAction)
addChild(previousButton)
let selectButton: SButton = SButton(defaultButtonImage: "select", activeButtonImage: "selectP", buttonAction: selectAction)
addChild(selectButton)
func nextAction()
backNumber += 1
backRemainder = backNumber % 2
switch backRemainder
case 0:
backName = "back1"
case 1:
backName = "back2"
selectButton.isHidden = true
default:
backName = "back1"
UserDefaults.standard.set(backName, forKey: "backSaved")
background.texture = SKTexture(imageNamed: "\(backName!)")
func previousAction()
backNumber -= 1
backRemainder = backNumber % 2
switch backRemainder
case 0:
backName = "back1"
case 1:
backName = "back2"
selectButton.isHidden = true
default:
backName = "back1"
UserDefaults.standard.set(backName, forKey: "backSaved")
background.texture = SKTexture(imageNamed: "\(backName!)")
如您所见,我正在尝试使用 isHidden 属性,但出现错误:“使用未解析的标识符 'selectButton'”。我尝试在 didMove(toView) 之前初始化按钮,但它只是把事情搞砸了,因为 selectAction() 必须在 didMove(toView) 块之后。我希望我刚刚写的内容在某些方面不会太混乱或错误,我只是在学习使用 SpriteKit 编写代码。
如何?
【问题讨论】:
【参考方案1】:错误是因为您在 didMove(to view: SKView)
函数中声明了您的按钮。 PreviousAction()
不会知道这些变量的存在。您需要将他们的声明移到类而不是函数中
class ShopScene: SKScene
let nextButton: NButton!
let previousButton: PButton!
let selectButton: SButton!
override func didMove(to view: SKView)
nextButton = NButton(defaultButtonImage: "next", activeButtonImage: "nextP", buttonAction: nextAction)
addChild(nextButton)
previousButton = PButton(defaultButtonImage: "previous", activeButtonImage: "previousP", buttonAction: previousAction)
addChild(previousButton)
selectButton = SButton(defaultButtonImage: "select", activeButtonImage: "selectP", buttonAction: selectAction)
addChild(selectButton)
【讨论】:
以上是关于在 SKScene 中隐藏和取消隐藏按钮的主要内容,如果未能解决你的问题,请参考以下文章