2011-03-23 76 views
1

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

让我知道你的想法和建议,请!

回答

2

如果你只是想检查如果所有对象的速度和大小都相同,这将更容易,因为您可以只使用一个队列。

然后从最低的对象开始并检查,直到您得到的对象对于可能的碰撞来说太高(如果框可以改变高度,则这可能会有所不同)。

例子:

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

假设你有6名高空坠物。如果他们被排序,你现在可以遍历列表并检查可能的冲突。如果达到高度阈值(对象2所在的位置),则可以停止,因为它们还不能相互碰撞(无需检查对象3-6)。

请注意,还有其他更复杂但更快的方法,但这应该让你开始。

编辑:

这是一种扫描和修剪的算法,如果你想google一下。

另一种方法可以是计算ETA(估计的到达时间),即对于每个新对象计算它应该跨越阈值线的时间。然后按那个时间排序,并检查所有时间差异为< = 0(他们跨越门限线)。这对于不同大小和速度的物体以及捕捉箱处于固定高度的情况都适用。