【问题标题】: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)
    
        }
    

    希望这可以对其他人有所帮助,因为尽管事后看来这似乎微不足道,但在下班后的几个晚上,它却令人头疼。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-28
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多