java - 随机落体及碰撞检测方法

标签 java android random

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

请告诉我您的想法和建议!

最佳答案

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

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

例子:

|           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/

相关文章:

java - 消息未从客户端发送到服务器 - Java

java - 通过 sh 脚本启动 jar 工作正常,但通过 crontab 给出 ClassFormatError

android - 仅在 Android 6 上存在安全异常

Android Studio 4.1 : XML Resource ID auto Fetching issue

c# - 如何在C#中生成一个总共8位的随机数? (4个整数,4个小数部分)

java - 接口(interface)如何作为引用传递

java - Hibernate:修改条件 sqlrestriction 以使用大于或等于日期

android - Android 上的 PhoneGap : Loading a WebApp from a remote server

python - 从 python 中具有固定数量元素的集合中进行非常快速的采样

sql - 选择 "similar"组 - 从哪里开始概率?