Скрыть и показать кнопки в 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)
    }
}
Другие вопросы по тегам