随机下落物体和碰撞检测方法

时间:2011-03-23 22:41:30

标签: java android random

我正在编写一个游戏,您可以捕捉从屏幕顶部掉落的物体(位图)。这些位图都将具有相同的图像文件。但是,我希望它们的随机数量无限下降(直到游戏“结束”)。我现在的问题是提出用于检测这些随机生成的位图捕获的算法。当我只有一个图像掉落时,我可以注册一个捕获,但我不知道我将如何实现多个图像下降并能够实现碰撞检测。到目前为止,我提出了两个想法。其中之一是拥有一个队列,每个下落的对象在创建时都会被放入队列中。程序只会检测框是否已捕获队列第一个位置的对象。如果(a)被捕获或(到达屏幕上的某个点,那么该对象将被出列。我的另一个想法更多的是一个问题 - 我能够为这个下降的对象创建一个类,并且有一个处理冲突的内部方法?每当创建该类的新实例时,总是在侦听冲突?

请告诉我你的意见和建议!

1 个答案:

答案 0 :(得分:2)

如果您只想检查坠落物体和捕捉盒之间的碰撞,您可能只需按物体高度对物体进行排序 - 例如使用插入排序。如果所有对象具有相同的速度和大小,则更容易,因为那时你可以使用队列。

然后从最低的物体开始并检查,直到你得到的物体太高而不可能发生碰撞(如果盒子的高度可能不同,这也可能会有所不同)。

示例:

|           6  |
|   5          |
|  3      4    |
|              |
+----2---------+  <-- if you reach an object at this height stop
| 1            |
|   |__|       |
+--------------+  

假设您有6个坠落的物体。如果它们已经排序,您现在可以遍历列表并检查可能的冲突。如果达到高度阈值(对象2所在的位置),则可以停止,因为它们不会发生碰撞(无需检查对象3-6)。

请注意,还有其他更复杂但更快的方法,但这应该可以帮助您入门。

编辑:

这是一种扫描和修剪算法,以防你想谷歌。

另一种方法可以是计算ETA(估计的到达时间),即对于每个新对象计算它应该越过阈值线的时间。然后按那个时间排序并检查所有时差为&lt; = 0(他们越过阈值线)的所有时间。这适用于不同尺寸和速度的物体,并且捕捉盒处于固定高度。