我不确定这是否是一个错误,但是即使我在其中一个Sprite上设置了一个自定义类名称,它似乎也被完全忽略了。

我尝试了一个被拖动的 Assets ,然后一个空节点,它们都完全忽略了Monkey类的关联,而只是创建了一个原始的SKSpriteNode。

猴子节点代码如下。

import Foundation
import SpriteKit

class Monkey: SKSpriteNode{

    let monkeyWalkAtlas = SKTextureAtlas(named: "MonkeyWalk")

    override init(texture: SKTexture?, color: NSColor, size: CGSize) {
        super.init(texture: texture, color: color, size: size)
        print("Monkey.init debug")
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

注意:.sks节点上的自定义类是xcode7中的新增功能。

于2015年6月21日编辑

我简化了设置,但是仍然存在在iOS9模拟器中编译/运行的问题。我使用默认的SpriteKit模板创建了一个项目,更改GameSence以使其具有以下内容(以及空的Monkey类)
import SpriteKit

class GameScene: SKScene {

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("touch down")
       /* Called when a touch begins */
        for node in self.children {
            print(node)
        }
    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}

public class Monkey: SKSpriteNode {}

在GameScene.sks上拖动一个Empty节点,将自定义类设置为Monkey,但是当我按下以打印子节点时,我又得到了:
touch down
<SKSpriteNode> name:'SKNode_0' texture:['nil'] position:{753.5, 333.5} scale:{1.00, 1.00} size:{0, 0} anchor:{0, 0} rotation:0.00

最佳答案

在Swift中,您始终必须在类名称之前添加模块名称。您可以在build设置的“产品模块名称”字段中找到模块名称。
如果在项目名称中使用“-”,则模块名称会将“-”转换为“_”。(在我的测试项目“Test-Game”中,模块名称为“Test_Game”,因此我必须使用“Test_Game.Monkey”作为自定义类,在当前的Xcode Beta中对我有效

关于xcode - 无法在SpriteKit Scene(swift和xcode7 beta版)中使用自定义类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30833196/

10-11 14:48