我目前正在SpriteKit中使用Swift制作一个小型/基本的迷你游戏,并且我遇到了上面标题中显示的错误... 大多数时候,一切都运行良好,但每隔一段时间,我就会收到这个错误(大多数时候它都会发生,当游戏超过下面的时,它会正确所谓的)。该错误始终指向以下行:
func handle_tilt(acceleration_data: CGFloat)
{
if ((childNodeWithName("hero")) != nil){
childNodeWithName("hero")?.physicsBody?.applyForce(CGVectorMake(acceleration_data * 50, 0))
}
}
我该如何解决这个问题? **下面设置的加速度计代码包含在
中if motionManager.accelerometerAvailable == true {
self.motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) {
(data, error) in
if (data.acceleration.y != 0) {
self.motionManager.accelerometerActive == true
self.handle_tilt(CGFloat(data.acceleration.y))
}
}
}
调用时触发错误的函数......
func game_over()
{
self.removeActionForKey("spawn_flying_squirrels")
self.removeActionForKey("spawn_flying_squirrels")
println("Removed the actions")
self.motionManager.stopAccelerometerUpdates()
println("removed motion manager")
if let recognizers = self.view?.gestureRecognizers {
for recognizer in recognizers {
self.view!.removeGestureRecognizer(recognizer as! UIGestureRecognizer)
}
}
println("removed the gesture recognizers")
//saves the score or doesn't (if it doesn't make the high score
saveScore(score)
for child in self.children as! [SKNode]
{
removeChildrenInArray([child])
}
println("removed the children")
let scene = GameScene(size: self.size)
scene.scaleMode = .AspectFill
NSLog("HE DEAD")
view?.presentScene(scene)
}
我认为发生的事情是game_over功能会删除"英雄" node,然后handle_tilt函数尝试访问" hero"导致崩溃。我试图用handle_tilt函数中的if语句来阻止它,但它并没有像我希望的那样取得全部成功...