SpriteKit暂停恢复错误

时间:2017-06-30 04:12:58

标签: ios swift sprite-kit resume

$$('select option[value*="Test"]');

当在继续按钮上结束触摸时,我有一个线程1:信号SIGABRT错误。我发现的一点是,如果我在触摸中声明精灵(继续按钮)结束按钮不会被删除,但是,当我在函数外面声明继续按钮精灵时,删除了继续按钮。问题是有时应用程序只会崩溃显示线程1错误。关于如何阻止崩溃的任何想法?

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let touchLocation = touch!.location(in: self)
if continueButton.contains(touchLocation) {
    scene?.view?.isPaused = false
    pauseMenu.removeFromParent()
    self.addChild(pauseButton)
    self.addChild(upButton)
    continueButton.removeFromParent()
}
}

这是声明按钮的地方(在函数之外)

class GameScene: SKScene {
var mainturret = SKSpriteNode(imageNamed: "Main Turret")
var pauseButton = SKSpriteNode(imageNamed: "Pause Simbol")
var angleToShoot = 0
var touchIsOn = 0
var pointTwoSecondInterval = 0
let pauseMenu = SKSpriteNode(imageNamed: "Paused")
var zombieSpawningTimer = Timer()
var upButton = SKSpriteNode(imageNamed: "Up Button")
let downButton = SKSpriteNode(imageNamed: "Down Button")
let popUpMenu = SKSpriteNode(imageNamed: "TurretSpot")
var continueButton = SKSpriteNode(imageNamed: "Continue")
...}

第三行代码出错。 这是电脑告诉我的。

  

2017-06-30 07:32:26.053429-0600生存之夜[4635:1030550] *   由于未捕获的异常而终止应用程序   'NSInvalidArgumentException',原因:'试图添加一个SKNode   已经有一个父:name:'(null)'   纹理:['向上按钮'(200 x 200)]位置:{0,-254}   比例:{0.57,0.57}大小:{56.800003051757812,56.800003051757812}   锚:{0.5,0.5}旋转:0.00'   * 第一次抛出调用堆栈:(0x188da6fd8 0x187808538 0x188da6f20 0x1984f1738 0x1984f1664 0x100073d40 0x100074908 0x1984d7050   0x18ef0a46c 0x18ef05804 0x18eed6418 0x18f6cff64 0x18f6ca6c0   0x18f6caaec 0x188d55424 0x188d54d94 0x188d529a0 0x188c82d94   0x18a6ec074 0x18ef3b130 0x100078c5c 0x187c9159c)libc ++ abi.dylib:   以NSException类型的未捕获异常终止

1 个答案:

答案 0 :(得分:2)

原因是因为你将一个孩子的upButton两次添加到某个节点。

最有可能的是,self.addChild(upButton)方法中的行touchesEnded导致了问题。此时,请验证upButton.parent中的nil是否为public static void test(List<? extends Number> list) { for (Number t : list) { } } 。如果没有,您的代码中会出现逻辑错误。