gpt4 book ai didi

xcode - 物理模拟的SceneKit更新方法

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:43 25 4
gpt4 key购买 nike

我玩过 sprite kit 并使用更新方法来设置每个时间步要处理的东西。我正在尝试使用场景工具包学习一些 swift,但似乎找不到等效项。

你能给我指出一个为 SceneKit 实现更新方法的例子吗?谢谢。

最佳答案

(是的,我知道这个问题是关于 SceneKit 的,而不是 SpriteKit,但它涉及到两个框架之间的共性和差异,所以我将在这个答案中解决这些问题。)

在 SpriteKit 中,游戏循环方法(updatedidSimulatePhysics 等)最初是场景类 SKScene 的一部分。不过,这并不总是最好的主意 — 您可能更希望将场景实例视为数据,而不是将其视为实现游戏逻辑的地方(尤其是现在场景可以完全在 Xcode 6 图形场景编辑器中构建)。所以在 iOS 8 和 OS X Yosemite 中,这些方法在两个地方。如果您已经为每帧游戏逻辑子类化 SKScene,您可以继续这样做。但是,如果您更愿意将该代码放在其他地方,您可以在场景中设置一个委托(delegate),并实现等效的 SKSceneDelegate。那里的方法。

SceneKit 有更多的关注点分离。 SCNScene 更接近于纯数据模型对象,所有渲染循环功能都由负责显示场景的 View (或其他对象)管理。通常,您在 SCNView 中显示场景 — 但还有其他类也可以渲染场景,所以它们的通用 API 可以在 SCNSceneRenderer 中找到。协议(protocol)。使用该协议(protocol)定义的 delegate 属性为您的 View 设置委托(delegate),在您的委托(delegate)中您可以实现 SCNSceneRendererDelegate参与渲染循环关键阶段的方法。

SceneKit 循环阶段几乎直接对应于 SpriteKit 中的阶段:update: 变为 renderer:updateAtTime:didEvaluateActions: 变为 renderer:didApplyAnimationsAtTime:(因为它包括 CoreAnimation 风格的动画以及 SpriteKit 风格的 Action )等。


因此,对于与 SpriteKit 每帧 update 方法等效的 SceneKit,请执行以下操作:

  1. 将您的自定义对象之一(例如, View Controller )设置为您的 SCNView 实例的委托(delegate)

  2. 在该自定义类中,实现以下方法:

    func renderer(_ aRenderer: SCNSceneRenderer!, updateAtTime time: NSTimeInterval) {
    // per-frame code here
    }

或者如果您的每帧逻辑需要在 Action 或物理处理后发生,则对其他 SCNSceneRendererDelegate 方法执行类似操作。

关于xcode - 物理模拟的SceneKit更新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com