Swift中的OSX SpriteKit游戏模板无法正常工作 - XCode6-b5

时间:2014-08-09 19:29:09

标签: macos templates swift sprite-kit

嗯,这很奇怪:我想尝试使用Swift和Xcode6-b5创建一个小型Mac游戏,但是当我打开一个新的项目模板,并且没有改变任何东西时,GameScene就不是了。加载,当我尝试运行它时控制台显示这两行:

2014-08-09 20:50:21.294 PokemonSK[3808:303] +[PokemonSK.GameScene nodeWithFileNamed:]: unrecognized selector sent to class 0x100009150
2014-08-09 20:50:21.295 PokemonSK[3808:303] +[PokemonSK.GameScene nodeWithFileNamed:]: unrecognized selector sent to class 0x100009150

我看到类似这样的主题Link1,但他们没有解释如何修复它,我也不想升级到约塞米蒂...

有人有想法解决这个问题吗?

由于

(这是AppDeleguate代码,它可能有帮助)

import Cocoa
import SpriteKit

class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet var window: NSWindow!
@IBOutlet var skView: SKView!

func applicationDidFinishLaunching(aNotification: NSNotification?) {
    /* Pick a size for the scene */
    let scene = GameScene(fileNamed: "GameScene")
    /* Set the scale mode to scale to fit the window */
    scene.scaleMode = .AspectFill

    self.skView!.presentScene(scene)

    /* Sprite Kit applies additional optimizations to improve rendering performance */
    self.skView!.ignoresSiblingOrder = true

}

func applicationShouldTerminateAfterLastWindowClosed(sender: NSApplication) -> Bool {
    return true;

3 个答案:

答案 0 :(得分:0)

我不确定它是否是同一个东西,但我在iOS设备上尝试从beta 5运行项目时遇到了类似的问题。

而不是

let scene = GameScene(fileNamed: "GameScene")

尝试

if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
....
}

使用函数unarchiveFromFile,我认为它来自早期的模板。

extension SKNode {
class func unarchiveFromFile(file : NSString) -> SKNode? {

    let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")

    var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
    var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

    archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
    let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
    archiver.finishDecoding()
    return scene
}

}

答案 1 :(得分:0)

Apple显然正在添加新API并在广泛使用之前使用它们。这比应该更烦人,特别是因为有问题的代码并没有真正添加任何东西。

您可以通过一次更改获得基本演示代码。寻找:

    let scene = GameScene(fileNamed:"GameScene")

在AppDelegate.swift文件中,将其更改为:

    let scene = GameScene(size:self.skView.bounds.size)

答案 2 :(得分:0)

FYI大家,这个问题已在B6中修复。现在上面提到的解决方案将导致链接器错误。请务必删除您的unarchiveFromFile并恢复原始代码以使用fileNamed:。有点烦人,特别是考虑到错误是如此不透明。