【问题标题】:Make a Game Over Scene制作游戏结束场景
【发布时间】:2015-01-14 06:36:58
【问题描述】:

在我的游戏中,我希望在红灯动画期间触摸屏幕时出现一个游戏结束标签。绿灯动画关闭时红灯动画打开。当玩家在红灯动画期间触摸屏幕时,我希望游戏屏幕暂停并出现游戏结束标签。到目前为止我有这个,但是当我尝试运行它时应用程序崩溃了。

错误信息:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试添加一个已经有父节点的 SKNode:名称:'(null)' text:'游戏结束! Tap to Play Again' fontName:'Helvetica' position:{1024, 768}'

 override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */


    if gameOverLabel.parent == nil
    {
        self.addChild(gameOverLabel)
    }

    println(score)

    scoreLabel.text = "\(score)"
}

【问题讨论】:

  • 发布崩溃消息并突出显示崩溃的代码行。当您使用它运行 addChild 时,gameOverLabel 是否可能已经在层次结构中?
  • 我在原帖中添加了错误信息。
  • 无意冒犯,但是您阅读了错误信息吗?对我来说看起来很清楚。你应该在某个时候使用removeFromParent
  • 是的,我读过它,但不知道如何解决这个问题。我写了这行代码“gameOverLabel.removeFramParent()”。但是在redLight动画中触摸屏幕时gameOverLabel仍然没有出现。
  • 你能展示你初始化gameOverLabel的完整代码吗?

标签: ios swift sprite-kit skscene


【解决方案1】:

试试这个。您正在将 gameOverLabel 设置为字体太大且框架超出屏幕。这就是它不可见的原因。此外,当游戏结束时,您必须停止游戏。

if (!self.paused)
{
    if isGreenLightON
    {
        score += 50
    }
    else
    {
        self.paused = true

        if (gameOverLabel.parent != nil)
        {
            gameOverLabel.removeFromParent()
        }
        gameOverLabel.fontName = "Helvetica"
        gameOverLabel.fontColor = UIColor.blackColor()
        gameOverLabel.fontSize = 24
        gameOverLabel.text = "Game Over! Tap to Play Again"
        gameOverLabel.position = CGPointMake(CGRectGetMidX(self.frame), self.frame.size.height - 50)
        self.addChild(gameOverLabel)
    }
}
else
{
    score = 0
    if (gameOverLabel.parent != nil)
    {
        gameOverLabel.removeFromParent()
    }
    self.paused = false
}
scoreLabel.text = "\(score)"

【讨论】:

  • 我测试了一下,没有出现gameOverLabel。我在原始帖子中添加了我使用的代码。
  • 尝试上面的代码而不是你的代码在开始接触
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多