2011-12-20 94 views
1

我正在开发一个简单的游戏,其中有砖块,球和桨,你应该打砖块与球(你都知道这个游戏)。游戏开发为Android,离散运动

我的问题有点复杂,球以恒定速度运动,假设每秒200px,假设我每秒钟有30帧。这意味着每一帧球移动大约7个像素。

我有两件事我做每帧: 1.在屏幕上绘制游戏。 2.移动球,碰撞检测等。

问题是在X帧中,球没有碰到任何东西,但是在X + 1帧中他移动了7个像素,然后他部分在一个砖内或者部分在两个相邻的砖块内部,这更糟糕)。

发生这种情况是因为运动是离散的而不是连续的。

我真的不知道应该如何处理它,我在每一个我开发的游戏中都遇到了这个问题(不仅适用于android,也适用于PC)。可能我错过了我对游戏开发的理解中至关重要的一些东西。

在此先感谢。

回答

3

这是对数学有点沉重,但有在

http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-verlet-based-approach-for-2d-game-physics-r2714? 

一个很好的文章(由于_在URL似乎打乱了这么标记......)

本质上讲,你几乎做得对 - 当然,有更多的方法来做到这一点。只要确保在寻找碰撞时可以使用old(x,y)new(x,y),并且在完成碰撞检测之后才考虑移动路径“暂定”。 (也许present(x,y)destination(x,y)是更好的条件)

突围砖弹跳游戏的情况下,你要寻找的其中present (x,y) + movement (x,y) → destination (x,y)线(或载体)与砖的边缘相交,并创建与交点处顶点的反射角。您可以快速轻松浏览该文章关于刚体响应的整个后半部分。

+1

以上链接在Chromium中不起作用。尝试http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-verlet-based-approach-for-2d-game-physics-r2714 – austinmarton 2012-12-12 03:01:47

+0

谢谢。当我试图粘贴时,Markdown在这里似乎吃掉了URL。 (引用适当的层次将是我的死亡。) – BRFennPocock 2012-12-12 15:51:55

0

最简单的解决方案是使用某种类型的物理引擎。 Box2d是一个很棒的2D物理引擎,有多种语言编写的包装器。

通过使用物理引擎,您不必担心碰撞检测。所有这一切都为您照顾,以便您可以更专注于开发游戏的核心功能。