Скрыть и показать кнопки в SKScene
В игре, которую я разрабатываю с помощью 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.
Как я могу скрыть и показать кнопки в SKScene?
1 ответ
Ошибка в том, что вы объявляете свои кнопки в didMove(to view: SKView)
FUNC. 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)
}
}