【发布时间】:2011-09-27 11:27:00
【问题描述】:
我创建了一个 480x320 的简单小世界。 我刚刚实现了平滑滚动,但我一直注意到的一个问题是它会稍微卡顿几次。 我想我知道它为什么会口吃,但没有意识到如何准确地解决我的问题。 我没有在滚动计算中使用增量时间,因为它只会让我更加困惑。 应该如何使用 delta 值? 我通常会得到一个像 .2something 这样的值作为我的增量时间。 我还将 FPS 限制设置为 30FPS(准确地说是 33),并且在我的所有测试中帧速率从未低于 30。 我的滚动解决方案是将 xPos 值增加 TILE_SIZE (32) 并将 camera.x 值与 xPos 进行比较,并将 camera.x 增加或减少一定量 (4)。 现在我不确定如何在这个例子中使用增量。 我努力了: SPEED * deltaTime = 绝对不对; 速度 * (1 + deltaTime) = 不对; 速度 +/- deltaTime = 更卡顿;
我认为不使用增量时间会导致口吃是否正确,如果是这样,有人可以帮助我吗? 或者这完全是另一回事?
【问题讨论】:
-
我假设你所有的计算都是浮点数还是双精度数,对吧?
-
正确。实际上只是浮动
-
所以假设 33FPS,你的 DELTA 时间应该平均在 0.03f 左右。如果我们假设您的游戏每秒滚动 UNIT(10),我们将使用 POSITION = POSITION + UNIT * DELTA 计算当前位置...这有帮助吗?我不完全理解 xPos 和 camera.x 在你的情况下是什么。
-
xPos 和 camera.a 用于我滚动相机/视口的方法。我现在要测试一下。
-
您希望相机以 8fps 的速度移动 32px。您的平均帧率为 33fps。这意味着移动 32 像素需要 0.24 秒,而每秒移动 133.3 像素。所以你想乘以 delta 的运动单位是 133.3 而不是 4。有意义吗?试着用时间而不是帧来思考。
标签: android optimization opengl-es