精灵套件暂停恢复错误


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()
}
}

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

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")
...}

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

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

代码的第三行发生错误。 这是计算机告诉我的。

2017-06-30

07:32:26.053429-0600 熬过黑夜[4635:1030550] * 由于未捕获的异常而终止应用 'NSInvalidArgumentException', reason: 'Attemped to add a SKNode 已经有一个父级:名称:"(空(" 纹理:[ "向上按钮" (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 类型的异常

原因是您将upButton作为子节点添加到某个节点两次。

最有可能的是,touchesEnded方法中的行self.addChild(upButton)导致了问题。此时,验证upButton.parent是否在nil 中。如果不是,则代码中存在逻辑错误。

最新更新