【发布时间】:2021-12-19 04:46:48
【问题描述】:
在 SpriteKit 场景中,系统会自动调用许多方法,您可以在游戏场景中覆盖它们以实现自定义行为。例如:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches { self.touchDown(atPoint: t.location(in: self)) }
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
override func didFinishUpdate() {
// Do some stuff immediately before rendering
}
Apple's documentation for SpriteKit 有这个有用的图表,它显示了在每一帧中调用这些方法的顺序:
但是,此讨论不包括任何触摸事件,例如touchesBegan(_:with:)。我试图弄清楚这些触摸事件相对于 SpriteKit 帧周期中的其他事件在什么时候被调用。我找不到任何给出答案的 Apple 文档。
我能找到的唯一提及是在上面链接的文档中,它说:
场景的
update(_:)方法被调用,时间已经过去了 在模拟中。这是实施您自己的主要场所 游戏内模拟,包括输入处理、人工智能、 游戏脚本和其他类似的游戏逻辑。通常,你使用这个 对节点进行更改或在节点上运行操作的方法。
虽然它说update(_:) 方法是实现输入处理的地方,但这似乎有点误导,因为在iOS 上使用像touchesBegan(_:with:) 这样的触摸事件方法来捕获触摸输入是常见的做法。 SKScene 继承了这些触摸方法作为UIResponder 的子类(SKScene > SKEffectNode > SKNode > UIResponder)。但我正在尝试确定何时按照场景的帧周期事件的顺序调用这些方法。当您尝试在场景的帧周期内以特定顺序发生某些与触摸相关的事情时,了解这一点非常重要。
我的猜测是在帧周期开始时调用触摸方法,就在调用update(_:) 方法之前。但我正在寻找一个比我的直觉更明确的答案。
【问题讨论】:
标签: ios swift sprite-kit game-loop uiresponder