转换场景时出错? - 精灵套件
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”检查它,然后在其他地方打印一些东西。当应用程序崩溃时,您就会知道它在哪里。以上是关于转换场景时出错? - 精灵套件的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从代码中获取放置在场景编辑器中的 SKSpriteNode 的当前位置? - 精灵套件