转换场景时出错? - 精灵套件

Posted

技术标签:

【中文标题】转换场景时出错? - 精灵套件【英文标题】:Getting an error when transitioning scenes? - SpriteKit 【发布时间】:2017-01-10 01:01:54 【问题描述】:

我正在使用 SpriteKit 制作游戏,当我转换场景时游戏崩溃并出现错误:

线程 1:EXC_BREAKPOINT(代码=1,子代码=0x1007351fc)。

这是我的代码,看看发生了什么:

  import UIKit
  import SpriteKit

class Congrats: SKScene 
override func didMove(to view: SKView) 


 backgroundColor = UIColor(red: CGFloat(248), green: CGFloat(248), blue: CGFloat(248), alpha: CGFloat(255)) //SKColor

var message = "Good Job! "
let label = SKLabelNode(fontNamed: "AppleSDGothicNeo-Bold")
label.text = message
label.fontSize = 22
label.fontColor = SKColor.blue
self.backgroundColor = SKColor.black
label.position = CGPoint(x: size.width / 2, y: size.height / 2)
addChild(label)        
 run(SKAction.sequence([
    SKAction.wait(forDuration: 1.0),
    SKAction.run() 
        let reveal = SKTransition.flipHorizontal(withDuration: 1.0)
        let scene = GameOver(size: (self.view?.frame.size)!)                
        self.view?.presentScene(scene, transition:reveal)                
    

崩溃期间的另一个错误是:

[Graphics] UIColor 使用远远超出预期范围的组件值创建。在 UIColorBreakForOutOfRangeColorComponents 上设置断点进行调试。此消息只会记录一次。 3 致命错误:在展开可选值时意外发现 nil 2017-01-09 16:58:33.716407 MyGameApp[18371:5784169] 致命错误:在展开可选值时意外发现 nil

我过渡场景的方式:

  for touch: AnyObject in touches 
  let skView = self.view! as SKView
  skView.ignoresSiblingOrder = true
  var scene: Congrats!
  scene =  Congrats(size: skView.bounds.size)
  scene.scaleMode = .aspectFill
  skView.presentScene(scene, transition: SKTransition.doorsOpenHorizontal(withDuration: 1.0))

过渡场景时的另一个错误:

错误:

致命错误:在展开可选值时意外发现 nil 2017-01-10 22:45:56.200385 MyNewApp [20313:6167168] 致命错误:在展开可选值时意外发现 nil

【问题讨论】:

在您的自定义 SKScene 类中覆盖 func didMove(to view: SKView) 并将您的逻辑移动到此函数中。 我试过这样做,但你能检查我更新的问题吗?如果我做对了 如果取出SKAction序列会崩溃吗?您似乎每秒钟都在过渡到 GameOver 场景? 使用异常断点找到导致崩溃的确切代码行,并告诉我们结果。 @claassenApps 是的,当我评论 SKAction 序列时它仍然崩溃。 【参考方案1】:

我创建了一个新项目并粘贴了与您完全相同的代码,但没有出现任何错误。我只需要添加缺少的大括号。

关于 [Graphics] 警告,这是因为您试图创建分量大于 1.0 的颜色,这里:

backgroundColor = UIColor(red: CGFloat(248), green: CGFloat(248), blue: CGFloat(248), alpha: CGFloat(255)) //SKColor

您需要使用介于 0.0 和 1.0 之间的值,因此您应该这样做:

backgroundColor = UIColor(red: 248.0/255.0, green: 248.0/255.0, blue: 248.0/255.0, alpha: 1.0) //SKColor

【讨论】:

非常感谢,它成功了。但是之后我在我的问题中更新了另一个错误 @DevWeby 正如我所说,我制作了您的代码的完美副本并且它有效。我不知道为什么它会为你崩溃。唯一的解决方案是调试它。在你使用可选的任何地方,首先,用“if let unwrapped = optional”检查它,然后在其他地方打印一些东西。当应用程序崩溃时,您就会知道它在哪里。

以上是关于转换场景时出错? - 精灵套件的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的精灵套件场景出现在 UIView 上方?

有没有办法从代码中获取放置在场景编辑器中的 SKSpriteNode 的当前位置? - 精灵套件

精灵套件联系代表

在空闲时,SKScene变得反应迟钝

将游戏中心添加到游戏后第一次接触时 Spritekit 游戏场景停止

为中学复制游戏场景?