【发布时间】: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