【问题标题】:Animations and SCNTransactions sometimes delay while using multiple SCNRenderers使用多个 SCNRenderer 时,动画和 SCNTransactions 有时会延迟
【发布时间】:2018-06-16 10:19:25
【问题描述】:

我使用 3 个 SCNRenderer 从 3 个不同的角度渲染同一个游戏场景。这是一款第三人称射击游戏。前一天,我发现当所有的渲染器都工作时,主角的行走动画消失了,但我仍然可以控制他移动。然后我发现了这个thread。通过使用 CFAbsoluteTimeGetCurrent() 设置渲染函数的 atTime,动画确实出现了。但是,当英雄在运行 2 个动画时,例如边走边射击,渲染结果只显示了其中的 1 个。

我确实通过节省 SCNView 的渲染函数提供的时间解决了这个问题,然后将其应用于每个渲染器的渲染函数。这是我的解决方案示例:

var globeTime:TimeInterval = 0  

//the SCNView's render function:  
func renderer(_ aRenderer: SCNSceneRenderer,   
              updateAtTime time: TimeInterval) {   
     globeTime = time  
     //...  
}  

//each renderer's render function:  
renderer.render(atTime: globeTime,   
                viewport: viewport,   
                commandBuffer: commandBuffer,   
                passDescriptor: renderPassDescriptor)  

我成功地让那些渲染器渲染了正确的东西。然而,奇怪的事情开始发生。有时,当动画或 SCNTransaction 开始时,什么都没有发生。所有的动画和 SCNTransactions 只是在它们的初始状态中暂停。但是游戏仍在运行,这意味着我仍然可以控制我的英雄移动和跳跃,而无需任何动画。几秒钟后,暂停的动画和 SCNTransactions 开始。

我不知道是什么原因造成的。我检查了这些模型的 isPaused 属性以及 SCNView 和 SCNRenderer 的 isPlaying 和 loops 属性。不过,我不知道为什么。谁能帮帮我?

【问题讨论】:

    标签: ios animation scenekit renderer


    【解决方案1】:

    看来我已经找到答案了。在我创建一个优化之前,它会在我不需要渲染器时停止渲染。但是,似乎当渲染器工作时,游戏运行得更快。所以我猜通过打开和关闭这些渲染器,场景的时间会变得不稳定,这可能会影响动画的时间线。

    不管怎样,让这些渲染一直工作可以解决问题。

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多