我使用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属性。尽管如此,我还是想不出为什么。有谁可以帮我?
发布于 2018-01-07 17:56:38
看起来我已经找到答案了。之前我创建了一个优化,当我不需要渲染器时停止渲染它们。然而,似乎当渲染器工作时,游戏运行得更快。所以我猜通过打开和关闭这些渲染器,场景的时间会变得不稳定,这可能会影响动画的时间轴。
无论如何,让这些渲染一直工作就解决了这个问题。
https://stackoverflow.com/questions/48133325
复制相似问题