在付费网站的一些教程中,我了解到你可以通过再次呈现相同的场景重播游戏,但我再也无法访问该教程,所以我不确定我做错了什么。如果我没记错的话,教程使用了这样的东西(在GameScene
类中):
func newGame() {
let newScene = GameScene()
let transition = SKTransition.fadeWithColor(SKColor.blackColor(), duration: 0.5)
view?.presentScene(newScene, transition: transition)
view?.presentScene(newScene, transition: transition)
}
GameViewController.swift
:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if let skView = self.view as? SKView {
if skView.scene == nil { //if the scene hasn't been created yet
let aspectRatio = skView.bounds.size.height / skView.bounds.size.width
let scene = GameScene(size: CGSize(width: 320, height: 320 * aspectRatio))
//skView.showsFPS = true
//skView.showsNodeCount = true
//skView.showsPhysics = true
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
}
问题是这给了我以下错误:
libc++abi.dylib: terminating with uncaught exception of type NSException
如果我添加一些断点,问题似乎是我的GameScene
。这是它的前几行:
class GameScene: SKScene, SKPhysicsContactDelegate {
var player: Player!
var world: SKNode!
第一行和第二行造成致命错误(我认为),但我不确定原因。在再次呈现同一场景之前,我是否应该从场景中删除所有孩子?通过该教程,我们只是在几行中呈现了相同的场景,并且它有效。
更新:
class GameScene: SKScene, SKPhysicsContactDelegate {
var player: Player!
var world: SKNode!
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
player = Player(position: CGPointMake(size.width*0.5, size.height*0.4))
world.addChild(player)
}
}
因为GameScene
课程很长,所以我只添加了一些我认为有问题的部分,但不知道为什么或应该改变什么。
答案 0 :(得分:0)
改变这个:
func newGame() {
let newScene = GameScene()
let transition = SKTransition.fadeWithColor(SKColor.blackColor(), duration: 0.5)
view?.presentScene(newScene, transition: transition)
view?.presentScene(newScene, transition: transition)
}
对此:
func newGame() {
let newScene = GameScene(size: CGSize(width: 768, height: 1024))
let transition = SKTransition.fadeWithColor(SKColor.blackColor(), duration: 0.5)
view?.presentScene(newScene, transition: transition)
view?.presentScene(newScene, transition: transition)
}
另外,对于你的gameViewController,你不需要使用宽高比来制作skView的大小。由于您使用AspectFill作为scaleMode,场景会自动缩放它。这样,您将使屏幕大小为768x1024(纵向)或1024x768(横向)。为了使其与所有设备兼容,只需将背景设为1024x1024即可在iPad上看起来很好,只需通过以下操作即可调整iPad的HUD元素:
if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
yourButton.position.y += 100
yourLabel.position.y += 100
etc
}