当前位置: 首页 > 知识库问答 >
问题:

碰撞检测Android(与小行星!!)

何博涛
2023-03-14

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

然而,我很难理解如何为这些做碰撞检测。我将使用小行星的图像,所以可以很容易地为每个图像使用矩形边界框,但是由于小行星是圆形的(或者至少我的是圆形的!),当移动到矩形的角上时可以检测到碰撞,这不是小行星的视觉部分。

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

我想,如果所有的小行星都是一样的大小,我可以硬编码一个圆形/多边形包围框的一些点,然后把这些点转换到图像的位置--所以实际上,多边形就是小行星的形状?

任何关于做这件事的最佳方法的建议都是很好的。此外,如果有人可以编写一些高级碰撞检测伪代码,那将是非常感谢的:)

共有1个答案

端木冷勋
2023-03-14

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

  • (x (y-r
  • (y (x-r
  • 任何矩形角与(cx,cy)之间的距离小于R

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

对于非轴对齐的矩形,解决方案要复杂一些。给定矩形的四个顶点(A,B,C,D);如果下列任一项为真,则发生冲突:

  • (x (y
  • 交圆(A,B,cx,cy,r)
  • 交叉圆(B,C,cx,cy,r)
  • 交叉圆(C,D,cx,cy,r)
  • 交圆(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

这个函数是基于这个数学答案的公式,这是我找到的最简单的公式。

 类似资料:
  • 碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect

  • 本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 当试图判断两个物体之间是否有碰撞发生时,我们通常不使用物体本身的数据,因为这些物体常常会很复杂,这将导致碰撞检测变得很复杂。正因这一点,使用重叠在物体上的更简单的外形(通常有较简单明确的数学定义)来进行碰撞检测成为常用的方法。我们基于这些简单的外形来检测碰撞,这样代码会变得

  • 问题内容: 有人可以帮我了解JS中冲突检测的工作原理吗?我不能使用jQuery或gameQuery-已经使用了原型- 因此,我正在寻找非常简单的东西。不要求完整的解决方案,只需为我指明正确的方向。 假设有: 现在球正在移动(任何方向)。“ Someobject”(0-X)已经预先定义,其中有20-60个随机放置,如下所示: 我可以创建一个位置为“ someobject(X)”的数组,并在“球”移动

  • 我已经尝试添加冲突检测一段时间了,但似乎做不到... 要绘制地图,我只需使用x,y坐标: 使用这种方法,我想出了这种检测: 我一直在尝试使用for循环遍历树来检测玩家(一个矩形)是否穿过树,但我想不出任何东西。 我已经试过了 如果碰撞=true,player.update(碰撞)将矩形更改为红色,如果为false,将矩形变为黑色。 我已尝试使用for和if,例如: 等但这不起作用,它只适用于wit

  • 所以我试图用Python和Pyplay创建一个益智平台游戏,但是我遇到了一点麻烦。当我为主要角色使用单点图像,而不是矩形图像时,如何制作碰撞检测器?我知道直角图像有左、右、顶部和底部像素功能(这对冲突检测非常有用),但是对于单片图像有这样的功能吗?或者我只需要为x和y坐标创建一个变量图像的宽度/高度?我试过用那个 但是catImg一直在通过窗户的尽头。我做错了什么?提前谢谢。

  • 我有一些关于碰撞角度的问题。我正在尝试为一个游戏编写物理代码,我不想使用任何第三方库,实际上我想自己编写每一个东西。我知道如何检测两个球体之间的碰撞,但我不知道如何找到两个球体之间的碰撞/斥力角。我试过扭转物体的方向,但没有成功。如果你把我链接到一个有趣的.pdf文件教物理编程,那将是非常好的。