首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:利用加速度计实现球的平滑滚动

Android:利用加速度计实现球的平滑滚动
EN

Stack Overflow用户
提问于 2014-07-23 12:25:32
回答 1查看 731关注 0票数 1

我已经为Android开发了一个迷宫游戏,你可以通过倾斜手机来控制球。

所以我用加速度计把x和y加速度计的值积分,然后把球往那个方向移动一步。

我有一个问题,但我不能取得一个非常顺利的滚动。当球加快速度时,很明显,它是以离散的大步数跳跃的。我见过其他类似的应用程序,其中的球快速但顺利地滚动。

所以我可能不得不改变我的策略,用某种时间解决方案来代替。现在,速度越快,我移动的步伐就越大。相反,也许我应该有一个定时器,每毫秒移动一个像素,如果速度是高的,或者只有10毫秒,如果速度是低的,或者沿着这些线。或者人们是如何获得更流畅的滚动的呢?

另外:您会使用OpenGL吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-23 12:31:08

你在这里真正做的是积分耦合微分方程。如果你还没有掌握足够的微积分或物理知识,就别担心这意味着什么。

为了生存而集成耦合微分方程的人已经进化出了许多算法来有效地完成这个任务。

这里有四个方程:x方向和y方向的加速度,x方向和y方向的速度:

代码语言:javascript
运行
复制
dvx/dt = ax
dvy/dt = ax
dsx/dt = vx
dxy/dt = vy

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

听起来,您选择了最简单的方法来集成ODEs: Euler显式集成。您可以从开始时的值再加上时间步骤的更改次数来计算步骤结束时的值:

代码语言:javascript
运行
复制
(vx, vy)_1 = (vx, vy)_0 + (ax, ay)_0 * dt
(sx, sy)_1 = (sx, sy)_0 + (vx, vy)_0 * dt

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

您可以缩短时间步骤,这将迫使您多次执行计算,或者切换到另一个集成方案。寻找隐式积分,龙格-库塔等。

集成和呈现是两个独立的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24910442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档