Неожиданно найденный ноль при использовании переменной вне объявленной функции - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь создать своего рода математические игры, в которых, когда враг стреляет, пользователю предлагается вопрос по математике, я сделал так, чтобы, когда враг был застрелен, выскакивала клавиатура с цифрами, где пользователь вводил ответ. Но всякий раз, когда клавиатура всплывает, я получаю сообщение об ошибке:

Поток 1: неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

В верхней части кода я объявил переменные, которые я использую:

var button1:SKLabelNode?
var answerDisplay:SKLabelNode!

Эта функция запускается при выстреле врага:

func runMathsProblem(){
    //This is the label that is meant to display what the user enters

    let answerDisplay = SKLabelNode(fontNamed: "Bulky Pixels")
    answerDisplay.name = "AnswerDisplay"
    answerDisplay.text = "= "
    answerDisplay.fontSize = 110
    answerDisplay.fontColor = SKColor.white
    answerDisplay.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
    answerDisplay.zPosition = 110
    answerDisplay.position = CGPoint(x: self.size.width * 0.38, y: self.size.height * 0.63)
    self.addChild(answerDisplay)

    //This is the button the user presses to type "1" on screen

    let button1 = SKLabelNode(fontNamed: "Bulky Pixels")
    button1.name = "Button1"
    button1.text = "1"
    button1.fontSize = 110
    button1.fontColor = SKColor.white
    button1.zPosition = 120
    button1.position = CGPoint(x: self.size.width * 0.3, y: self.size.height * 0.32)
    self.addChild(button1)
}

Здесь он обнаруживает, нажал ли пользователь кнопку, и предназначен ли для добавления числа, нажатого в переменную answerDisplay, для отображения на экране (здесь также возникает ошибка):

 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch: AnyObject in touches{
        let pointOfTouch = touch.location(in: self)

        if button1!.contains(pointOfTouch){  **//This is where I get the error**
            answerDisplay!.text = answerDisplay.text! + "1"
        }
    }
}

Я думаю, это как-то связано с тем, как я объявил переменную

1 Ответ

0 голосов
/ 05 ноября 2018

В верхней части кода я объявил переменные, которые я использую

Но вы никогда не будете использовать их, потому что ...

let answerDisplay = SKLabelNode(fontNamed: "Bulky Pixels")
.
.
.
let button1 = SKLabelNode(fontNamed: "Bulky Pixels")
.
.
.

Это создает новых экземпляров из SKLabelNode вместо использования уже созданных вами. Итак, вам нужно удалить ключевое слово let, чтобы компилятор понял, что вы ссылаетесь на переменные, которые вы уже объявили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...