是否可以像 SKScene 一样在 SCNScene 或 SCNNode 中使用 "update(_ currentTime: TimeInterval)"?
Is it possible to have "update(_ currentTime: TimeInterval)" in SCNScene or SCNNode the same way as SKScene?
我正在开发一款需要同时使用 SceneKit 和 SpriteKit 的 iOS 游戏,我想知道 Render/update 循环功能。
我将使用 SpawnController class 生成不同类型的对象,它们将基于时间间隔。
现在我有一个符合 SCNSceneRendererDelegate 的 GameViewController here
我对其进行了修改,以便在委托更新函数中调用 SpawnController 的自定义更新函数,如下所示:
extension GameViewController: SCNSceneRendererDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
mySpawnController.nextSpawn()
}
}
我觉得必须有更好的方法来做到这一点,例如向 SCNScene 或 SCNNode 添加委托。
我的问题:
是否可以像 SKScene 一样为 SCNScene 或 SCNNode 使用 "update(_ currentTime: TimeInterval)"?
或者我应该继续从我的 GameViewController 中的一个 SCNSceneRendererDelegate 更新函数调用自定义添加的更新函数?
谢谢
SCNView
,符合SCNSceneRendererDelegate
调用renderer(_: updateAtTime:)
分配的委托,是插入游戏循环逻辑的正确位置。
关于您的问题:SCNScene
和 SCNNode
都没有自己的更新方法。如果您同时使用 SceneKit 和 SpriteKit,如上所述,为游戏循环逻辑留出一个位置就足够了(但不是必需的),因此您的示例看起来是正确的。
准确地说,是有区别的,尽管渲染循环方法看起来很像:
- 在 SpriteKit scene 中调用渲染循环:
SKSceneDelegate
的 update(_:)
- 在 SceneKit view(或其他
SCNSceneRenderer
)中调用渲染循环:SCNSceneRendererDelegate
的 renderer(_: updateAtTime:)
虽然在 SpriteKit 视图中有 SKViewDelegate
的 view(_:shouldRenderAtTime:)
如果应该调用渲染循环,它必须 return 为真。 SKScene
的委托只是为了避免 SKScene
.
的子类化而存在
如果您希望更精确地控制更新逻辑,我建议您使用 GameplayKit which is independent from SceneKit/SpriteKit and allows easy per-entity/per-component 更新以及 entity/component 重用和其他好东西。
我正在开发一款需要同时使用 SceneKit 和 SpriteKit 的 iOS 游戏,我想知道 Render/update 循环功能。
我将使用 SpawnController class 生成不同类型的对象,它们将基于时间间隔。
现在我有一个符合 SCNSceneRendererDelegate 的 GameViewController here 我对其进行了修改,以便在委托更新函数中调用 SpawnController 的自定义更新函数,如下所示:
extension GameViewController: SCNSceneRendererDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
mySpawnController.nextSpawn()
}
}
我觉得必须有更好的方法来做到这一点,例如向 SCNScene 或 SCNNode 添加委托。
我的问题:
是否可以像 SKScene 一样为 SCNScene 或 SCNNode 使用 "update(_ currentTime: TimeInterval)"? 或者我应该继续从我的 GameViewController 中的一个 SCNSceneRendererDelegate 更新函数调用自定义添加的更新函数?
谢谢
SCNView
,符合SCNSceneRendererDelegate
调用renderer(_: updateAtTime:)
分配的委托,是插入游戏循环逻辑的正确位置。
关于您的问题:SCNScene
和 SCNNode
都没有自己的更新方法。如果您同时使用 SceneKit 和 SpriteKit,如上所述,为游戏循环逻辑留出一个位置就足够了(但不是必需的),因此您的示例看起来是正确的。
准确地说,是有区别的,尽管渲染循环方法看起来很像:
- 在 SpriteKit scene 中调用渲染循环:
SKSceneDelegate
的update(_:)
- 在 SceneKit view(或其他
SCNSceneRenderer
)中调用渲染循环:SCNSceneRendererDelegate
的renderer(_: updateAtTime:)
虽然在 SpriteKit 视图中有 SKViewDelegate
的 view(_:shouldRenderAtTime:)
如果应该调用渲染循环,它必须 return 为真。 SKScene
的委托只是为了避免 SKScene
.
如果您希望更精确地控制更新逻辑,我建议您使用 GameplayKit which is independent from SceneKit/SpriteKit and allows easy per-entity/per-component 更新以及 entity/component 重用和其他好东西。