2

我有一个场景,我的场景中发生了固定更新。

每次更新,我想创建一个阴影,使用精灵先前的位置。

func update(currentTime: NSTimeInterval)
{
    shadow.position = sprite.position
}

现在,当我对精灵施加脉冲时,我希望精灵增加相同的步数,而不管实际用于到达下一个更新帧的时间。

然而,情况并非如此,因为当比较我的模拟器上的阴影和我设备上的阴影时,两者之间的距离是非常不同的。

EG 我的手机花了 1 秒来移动精灵 60 步 我的模拟器花了 2 秒来移动精灵 60 步

在固定更新世界中。两者都花了 60 帧来实现,模拟器只是落后了。

然而,实际结果将使模拟器处于 120 步

我尝试禁用asynchronousSKView希望可以让我得到修复更新,但这让我无处可去,所以我问是否有人知道如何让 SKPhysics 在修复更新框架上工作。

4

1 回答 1

1

我不确定它是否对你有用,我很确定你知道这个参数,但也许你没有注意到:

if let scene = GameScene(fileNamed:"GameScene") {
            // Configure the view.
            let skView = self.view as! SKView
            skView.showsFPS = true
            skView.showsPhysics = true
            skView.showsNodeCount = true

            skView.frameInterval = 1 // real devices
            #if (arch(i386) || arch(x86_64)) && os(iOS)
                skView.frameInterval = 2  // <- this one
            #endif 

            /* Sprite Kit applies additional optimizations to improve rendering performance */
            skView.ignoresSiblingOrder = true
            /* Set the scale mode to scale to fit the window */
            scene.scaleMode = .ResizeFill
            skView.presentScene(scene)
        }

消息来源

    /* Number of hardware vsyncs between callbacks, same behaviour as CADisplayLink. Defaults to 1 (render every vsync) */
        public var frameInterval: Int

文档

这是苹果的官方文件,上面写着:

默认值为 1,这会导致您的游戏以显示器的刷新率得到通知。如果该值设置为大于 1 的值,则显示链接会以原生刷新率的一小部分通知您的游戏。例如,将间隔设置为 2 会导致每隔一帧调用一次场景,提供一半的帧速率。

将此值设置为小于 1 会导致未定义的行为并且是程序员错误。

于 2016-07-10T08:10:23.430 回答