【发布时间】:2016-10-18 21:37:45
【问题描述】:
试图继承 SKSpriteNode 以使我的游戏代码更清晰,但我显然不明白一些东西。这是一个非常简单的示例:我创建了一个名为 Alien.swift 的新 Swift 文件,其内容如下:
import SpriteKit
class Alien: SKSpriteNode {
}
在我的游戏中,我会这样做:
let alienSprite: Alien = Alien()
print("It's an \(alienSprite)")
我得到:
这是一个 (SKSpriteNode) 名称:'(null)...'
甚至 Xcode 都说它是“外星人精灵”:
为什么在运行时不打印它是“alienSprite”?
编辑:在这里合并我的一个 cmets - 我实际上是从我的 .sks 文件中获取精灵,我将它与场景编辑器一起放置并设置其自定义类。我试着把它捡起来:
let alien = childNodeWithName("alien") as! alienSprite
但我得到了错误:
Cannot cast SKSpriteNode to alientSprite
【问题讨论】:
-
这太简单了——我必须做一些愚蠢的事情。我检查了我遵循的教程,它看起来一样。我认为在这个阶段我不需要重写任何初始化程序,只是为了获得一个基本的子类。
-
这似乎是SKSpriteNode的标准描述方法,我不让它混淆你。您可以在运行时使用
print(type(of: alienSprite))(Swift 3) 或print(alienSprite.dynamictype)(Swift 2) 检查类。 -
@MartinR 谢谢 - 我会做更多的测试。我最初是从 .sks 文件(通过 childNodeWithName)中获取 Sprite,它生成了一个异常,即从 SKSpriteNode 到 Alien 的转换失败。
-
我的最后一条评论中有一个错字,它是 Swift 2 的
print(alienSprite.dynamicType)。– 投票结束是一个无法再重现的问题。 -
Steve,放入精灵自定义类后按 cmd + s(一定要按 Enter 退出文本编辑模式)
标签: swift sprite-kit subclassing