我正在尝试制作一种数学游戏,当敌人被枪杀时,系统会提示用户一个数学问题,所以我做到了,所以当敌人被枪击时,会弹出一个带有数字的键盘,用户可以在其中输入答案。但是只要键盘弹出,我都会收到错误消息:
线程1:致命错误:在展开可选值时意外发现nil
在代码的顶部,我声明了我正在使用的变量:
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"
}
}
}
我认为这与声明变量的方式有关
答案 0 :(得分:0)
在代码顶部,我声明了我正在使用的变量
但是您永远不会最终使用它们,因为...
let answerDisplay = SKLabelNode(fontNamed: "Bulky Pixels")
.
.
.
let button1 = SKLabelNode(fontNamed: "Bulky Pixels")
.
.
.
这将创建SKLabelNode
的新实例,而不使用您已经创建的实例。因此,您需要做的是删除关键字let
,以便编译器理解您引用的是已经声明的变量。