使用多个SCNRenderers时,动画和SCNTransactions有时会延迟

时间:2018-01-07 00:38:05

标签: ios animation scenekit renderer

我使用3个SCNRenderers从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属性。不过,我无法弄清楚原因。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

似乎我得到了答案。在我创建一个优化之前,当我不需要它时,它会阻止渲染器渲染。然而,似乎当渲染器工作时,游戏运行得更快。所以我想通过打开和关闭这些渲染器,场景的时间变得不稳定,这可能会影响动画效果。时间轴。

无论如何,让这些渲染工作始终能够解决问题。