gpt4 book ai didi

java - 碰撞检测机器人(带小行星!!)

转载 作者:行者123 更新时间:2023-11-30 09:25:43 26 4
gpt4 key购买 nike

我目前正在创建一个 Android Java 游戏。一种月球着陆器类型的游戏。我希望实现某种障碍,并选择了随机放置在屏幕上的小行星。

但是,我很难理解如何对这些进行碰撞检测。我将使用小行星的图像,因此可以轻松地为每个图像使用一个矩形边界框,但由于小行星是圆形的(或者至少我的是!),当在矩形的角上移动时可能会检测到碰撞,这在视觉上不是小行星的一部分。

我猜我需要使用某种边界圆圈,但不确定如何使用图像设置它?

我想,如果所有小行星的大小都相同,我可以将一些点硬编码为圆形/多边形边界框,然后将这些点转换为图像的位置 - 因此实际上,多边形就是小行星的形状?

任何有关执行此操作的最佳方法的建议都会很棒。此外,如果有人可以编写一些高级碰撞检测伪代码,我们将不胜感激 :)

最佳答案

如果着陆器矩形是轴对齐的(其边缘与坐标轴平行),则很容易检查与圆的碰撞。给定一个半径为 r 的圆和中心(cx, cy)和原点为 (x, y) 的矩形, 宽度 w , 和高度 h ;如果满足以下条件之一,它们就会发生碰撞:

  • (x < cx < x+w)(y-r < cy < y+h+r)
  • (y < cy < y+h)(x-r < cx < x+w+r)
  • 矩形任意角与(cx, cy)之间的距离低于r .

正如我在评论中所说,圆之间的碰撞更容易,因为您只需要检查圆心之间的距离是否小于半径之和。

对于非轴对齐的矩形,解决方案有点复杂。给定矩形的四个顶点(A、B、C、D);如果以下任一情况为真,则发生碰撞:

  • (x < cx < x+w)(y < cy < y+h)
  • intersectCircle(A, B, cx, cy, r)
  • intersectCircle(B, C, cx, cy, r)
  • intersectCircle(C, D, cx, cy, r)
  • intersectCircle(D, A, cx, cy, r)

函数的伪代码intersectCircle这是:

intersectCircle(P1, P2, a, b, r):
x1, y1 = P1
x2, y1 = P2
p = abs((x1-x2)*(a-x1)+(y2-y1)*(b-y1))
q = sqrt((x1-x2)^2 + (y1-y2)^2)
return r > p/q

这个函数是基于this Mathematics' answer的公式,这是迄今为止我发现的最简单的方法。

关于java - 碰撞检测机器人(带小行星!!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com