【问题标题】:app crashing after trying to load an skspritenode twice?尝试加载 skspritenode 两次后应用程序崩溃?
【发布时间】:2017-05-30 04:48:03
【问题描述】:
我之前问过一个问题,最后我把它删除了,虽然我知道了,但实际上我只是缩小了范围。
当我的一个节点撞到障碍物时,游戏会显示一个分数标签和一个重启按钮。但是,如果我的节点在初始命中后命中了不同的对象,应用程序就会崩溃。如果我在标签前使用 // 运行游戏并重新启动以将它们排除在等式之外,游戏运行良好,但如果我使用它们运行游戏,它就会崩溃。
这让我相信它崩溃了,因为它试图加载重启按钮和分数标签两次。我可能完全错了,但我该如何纠正呢?
【问题讨论】:
标签:
swift
xcode
sprite-kit
swift3
【解决方案1】:
我认为你可能是对的。
尝试addchild 是我认为您正在向场景添加东西的方式。如果您尝试将某些内容添加到已添加到某个内容的场景或对象,则会发生崩溃。
因此,您可能正在尝试将重启和分数标签添加到某个孩子,而他们已经有了父母,这会导致崩溃。
【解决方案2】:
解决了!
我添加了 if 语句以使应用仅在 1 次碰撞后运行我的碰撞代码,而不是 2 次p>
var collision = Int()
func didBegin(_ contact: SKPhysicsContact) {
var firstBody : SKPhysicsBody = contact.bodyA
var secondBody : SKPhysicsBody = contact.bodyB
if collision == 0{
if ((firstBody.categoryBitMask == physicsCatagory.bird) && (secondBody.categoryBitMask == physicsCatagory.obstacle)) {
collisionWithObstacle(bird: firstBody.node as! SKSpriteNode)
}
}
else if collision != 0{
if ((firstBody.categoryBitMask == physicsCatagory.bird) && (secondBody.categoryBitMask == physicsCatagory.obstacle)) {
}
}
}
func collisionWithObstacle(bird:SKSpriteNode){
collision = collision+1
scoreTimer.invalidate()
obstacleTimer.invalidate()
addChild(restart)
scoreLabel2.text = "Score: \(score1)"
addChild(scoreLabel2)
}
希望这可以对其他人有所帮助,因为尽管事后看来这似乎微不足道,但在下班后的几个晚上,它却令人头疼。