我正在编写一个游戏,您可以在其中捕获从屏幕顶部掉落的对象(位图)。这些位图都将具有相同的图像文件。但是,我希望其中的任意数量无限下降(直到游戏结束)。我现在的问题是提出一种算法来检测这些随机生成的位图的捕获。当我只有一个图像掉落时,我可以注册一个捕获,但是我不知道如何实现多个图像掉落并能够实现碰撞检测。到目前为止,我提出了两个想法。其中之一是拥有一个队列,并且每个下降的对象在创建时都会放入队列中。该程序只会检测盒子是否在队列的第一位置捕获了对象。如果(a)被捕获或(到达屏幕上的某个点,则该对象将出队。我的另一个想法更多是一个问题-我是否可以为该下降的对象创建一个类,并拥有一个它内部处理冲突的方法吗?一个总是在创建该类的新实例时侦听冲突的方法?
让我知道您的想法和建议!
最佳答案
如果只想检查掉落的物体和捕捉盒之间的碰撞,则可以按照物体的高度对物体进行排序-例如使用插入排序。如果所有对象都具有相同的速度和大小,这将更加容易,因为那样的话您就可以使用队列了。
然后从最低的物体开始检查,直到发现物体高度过高而可能发生碰撞(如果盒子的高度可能不同,则它可能也会有所不同)。
例:
| 6 |
| 5 |
| 3 4 |
| |
+----2---------+ <-- if you reach an object at this height stop
| 1 |
| |__| |
+--------------+
假设您有6个掉落的物体。如果已对它们进行排序,那么您现在可以遍历列表并检查可能的冲突。如果达到了高度阈值(对象2所在的位置),则可以停止,因为它们尚未发生碰撞(无需检查对象3-6)。
请注意,还有其他更复杂但更快速的方法,但这应该可以帮助您入门。
编辑:
如果您想用谷歌搜索,这是一种清除和修剪算法。
另一种方法可以是计算ETA(预计到达时间),即,对于每个新对象,计算其应越过阈值线的时间。然后按该时间排序,并检查所有时间差小于等于0的时间(它们越过阈值线)。这对于不同大小和速度的物体以及将捕捉盒固定在固定高度上的效果都很好。
关于java - 随机下落物体和碰撞检测方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5412573/