【问题标题】:OSX SpriteKit Game template in Swift not working - XCode6-b5Swift 中的 OSX SpriteKit 游戏模板不起作用 - XCode6-b5
【发布时间】:2014-08-09 19:29:09
【问题描述】:

嗯,这很奇怪:我想尝试使用 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 看到了类似的主题,但他们没有解释如何修复它,我不想升级到优胜美地......

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

谢谢

(这里是 AppDelegate 代码,它可能会有所帮助)

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;

【问题讨论】:

  • 苹果是否也同时发布了新的 osx 测试版?如果是这样,您可能也需要安装它
  • 好吧,不只是我有这个...
  • 那么,如果这仅适用于 10.10,那么如果我们想要针对更多种类的机器,这对我们意味着什么?我们应该期待 Apple 为旧操作系统发布新的 SpriteKit,还是我们必须手动删除所有这些代码?

标签: macos templates swift sprite-kit


【解决方案1】:

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

您只需进行一次更改即可获得基本的演示代码。寻找:

    let scene = GameScene(fileNamed:"GameScene")

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

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

【讨论】:

  • 哦,还有另一个错误,这次是在文档中:/* 为场景选择尺寸 */ 实际上并没有这样做,它是在选择背景图像。
【解决方案2】:

我不确定这是否是同一件事,但我在尝试在 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
}

}

【讨论】:

  • 我试过了,但出现了这个错误:“GameScene.Type'没有名为'unarchiveFromFile'的成员”:/
  • 你可能把他代码的第二部分放错了地方。剪切并粘贴它,使其紧跟在 AppDelegate.swift 的最后一行之后。而且您还必须使设置线像... scene?.scaleMode = .AspectFill
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多