之前我问了一个问题,我最后删除了它,因为我虽然想出来了,但实际上我只是把它缩小了。
当我的一个节点遇到障碍物时,游戏会显示一个分数标签和一个重启按钮。但是如果我的节点在初始命中后遇到另一个对象,则应用程序崩溃。如果我在标签前面用//运行游戏并重新启动以使它们脱离等式,游戏运行正常,但如果我与它们一起运行游戏,它就会崩溃。
这让我相信它的崩溃,因为它试图加载重启按钮和得分标签两次。我可能完全错了,但我怎么能纠正这个?
答案 0 :(得分:1)
我认为你可能是对的。
尝试addchild
是我认为你在场景中添加东西的方式。如果您尝试将某些内容添加到已添加到某个内容的场景或对象中,则会出现崩溃。
所以你可能会尝试将你的重启和分数标签添加到某个东西,就像孩子一样,当他们已经拥有父母时,这会导致崩溃。
答案 1 :(得分:0)
解决了!
我添加了if语句,使应用程序仅在1次碰撞后运行我的碰撞代码,而不是2
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)
}
希望这可以帮助别人,因为虽然事后看起来似乎微不足道,但在下班后的几个晚上,这是一个令人头疼的问题。