【发布时间】:2017-03-01 04:38:21
【问题描述】:
我正在尝试给我的主角一个自定义类,以便我可以在定义的类中定义他的所有行为。
我已经通过使用协议做了类似的事情:
protocol CustomNodeEvents{
func didMoveToScene()
}
此协议位于课程开始之前的 GameScene 文件中。 然后我在 GameScene 类中这样调用函数:
override func didMove(to view: SKView) {
if let customnode = player as? CustomNodeEvents{
customnode.didMoveToScene()
}
}
其中玩家被定义为:
player = self.childNode(withName: "//player") as! SKSpriteNode
也在 didMove(to view: SKView) 函数中。
现在我创建了另一个文件(我的自定义类文件)并写了:
import SpriteKit
class Custom: SKSpriteNode, CustomNodeEvents{
func didMoveToScene() {
print("It Worked")
}
}
我没有任何错误,但它实际上并没有运行我的自定义类中的代码块(在 GameScene.sks 文件中,我已经将该类附加到播放器)。
我的问题是如何让它发挥作用? 第二个问题是,这是定义自定义类并将其与其他类“连接”的最佳方式吗?
编辑:
class GameScene: SKScene {
var player: SKSpriteNode!
override func didMove(to view: SKView) {
player = self.childNode(withName: "//player") as! SKSpriteNode
if let customnode = player as? CustomNodeEvents{
customnode.didMoveToScene()
}
【问题讨论】:
-
嗯,你是不是把协议打错了?你有CustomNodeEvents(),它上面应该有()吗?
-
另外,在我看来,播放器可能是 SKSpriteNode,而不是自定义,因此在您的“如果让”中,您遇到了失败的情况,跳过了 didMoveToScene
-
我会仔细检查 SKS 文件以确保播放器的自定义类定义为自定义,然后执行
player = self.childNode(withName: "//player") as! Custom。如果这失败了,那么我们就知道问题出在哪里了 -
@Knight0fDragon 只是我打错了,已编辑!正如我所说,它运行没有任何错误。我还考虑了第二条评论,我正在试图弄清楚缺少什么,因为它在更新之前就起作用了(至少这个过程起作用了,不一定是我写的例子)
-
当您按照自己的方式编写条件代码时,请尝试评估您对它的需求。如果你需要保证一个玩家必须存在,那么打开可选的或者提供一个“else”条件。如果没有安全防护就让 if 那样做只会让调试变得很痛苦,并且在生产时会产生不良结果。您最不希望的事情是让您的客户崩溃,而他们无法解释它是如何崩溃的。
标签: swift xcode class sprite-kit swift3