Android:使用加速度计实现平滑的滚球

时间:2014-07-23 12:25:32

标签: android accelerometer

我开发了一款适用于Android的迷宫游戏,您可以通过倾斜手机来控制球。

因此,我使用加速度计并对x和y加速度计值进行积分,然后将球向该方向移动一步。

我有一个问题,但我无法实现非常顺利的滚动。当球加快速度时,很明显它会以很大的不连续步骤跳跃。我见过其他像这样的应用程序,球滚得很快但很顺利。

所以我可能不得不改变策略,而是使用某种时间解决方案。现在速度越快,我移动的步骤就越大。相反,也许我应该有一个定时器,如果速度很高,则每隔ms移动1个像素,如果速度很低,则每隔10毫秒移动一个像素。 或者人们如何实现更顺畅的滚动?

另外:你会使用OpenGL吗?

1 个答案:

答案 0 :(得分:2)

你在这里真正做的是积分耦合微分方程。如果你没有学到足够的微积分或物理知识,那就不要担心。

为了生活而整合耦合微分方程的人已经发展了许多算法来有效地实现这一目标。

这里你真的有四个方程:x方向和y方向的加速度以及x方向和y方向的速度:

dvx/dt = ax
dvy/dt = ax
dsx/dt = vx
dxy/dt = vy

(sx,sy)在给定时间给出球的位置。你需要(sx,sy)和(vx,vy)的初始条件。

听起来你选择了最简单的集成ODE的方法:Euler显式集成。您可以从开头的值加上变化率乘以时间步长来计算步骤结束时的值:

(vx, vy)_1 = (vx, vy)_0 + (ax, ay)_0 * dt
(sx, sy)_1 = (sx, sy)_0 + (vx, vy)_0 * dt

编程很容易,但如果你的时间步长太大,它在某些条件下往往会遇到稳定性问题。

您可以缩短时间步长,这将迫使您多次执行计算,或切换到另一个集成方案。搜索隐式集成,Runge-Kutta等。

集成和渲染是不同的问题。