Questions tagged «collision-detection»

碰撞检测是确定两个或多个实体在游戏过程中是否相互接触。

3
2D游戏碰撞响应:SAT和沿给定轴的最小位移?
我正在尝试在自己制作的2D游戏中实现碰撞系统。分离轴定理(如metanet的碰撞教程所述)似乎是处理碰撞检测的一种有效且健壮的方法,但我不太喜欢它们使用的碰撞响应方法。通过沿最小重叠轴盲目移动,该算法仅忽略了运动对象的先前位置,这意味着它在进入静止物体并随后反弹时不会与静止物体发生太多碰撞。 这是一个很重要的情况的示例: 根据上述SAT方法,该矩形将简单地从垂直于其斜边的三角形中弹出: 但是,实际上,矩形应该停在三角形的右下角,因为如果矩形沿着其位移矢量连续移动,那将是第一个碰撞点: 现在,这在游戏过程中可能实际上并不重要,但是我很想知道是否存在一种以这种方式有效且普遍地获得准确位移的方法。在过去的几天里,我一直在为之绞尽脑汁,我还不想放弃! (从StackOverflow交叉发布,希望这不违反规则!)

5
2D绳索碰撞检测
我想创建一条可以与以下youtube视频中的对象碰撞的绳索: 2D游戏物理绳 我认为您要实现Verlet集成,该集成使用点并将这些点与线连接起来。我试图弄清楚您将对绳索应用哪种类型的碰撞检测以在视频中获得效果。 我在想您必须对每个点做一些CD。我想使用box2D,所以我想知道使每个点都成为刚体起作用吗?任何意见,将不胜感激。

1
基于四叉树/网格的碰撞-将逻辑付诸实践
首先,我只是在短时间内编写了自己的游戏逻辑,所以如果这看起来很简单,我深表歉意。 我已经阅读了很多有关四叉树和基于网格的碰撞检测的信息。我了解逻辑-除非物体基本靠近,否则基本上不检查碰撞。但从未提及如何实际执行此操作。 我脑子里有几种可能的方法,但不确定哪种方法最好 通用碰撞测试-没有优化 for(var i:int = 0; i < objects.length; i++){ //find object A var objectA = objects[i]; for(var j:int = i + 1; j < objects.length; j++){ //find object B var objectB = objects[j]; if(objectA.collidesWith(objectB){ //handle collision logic } } 存储邻居(方法1) 但是,如果我们要优化冲突以仅检查附近的对象该怎么办。我们是否仍然遍历所有对象,还是创建带有近对象以进行检查的数组? var objects:Array = new Array(); var …

2
将许多小碰撞器组合成更大的碰撞器
我正在使用由数千个网格正方形组成的图块地图创建游戏。目前,每个广场上都有一个广场对撞机,用于检查碰撞。 但是,对于成千上万个微小的块,检查它们是否全部碰撞是低效率的。如果我事先知道tilemap看起来像这样,那么我可能只使用了3或4个大型对撞机,而不是数千个小型对撞机: 是否存在某种标准算法,可将许多小相邻的小块合并为最大的小块?如果是这样,有人可以在这里描述它,还是指向有关这种算法的文献? 另外,也许以这种方式预处理瓦片碰撞器完全是错误的方法。如果是这样,应对大量对撞机效率的正确方法是什么?

4
如何解决地面检查问题?
我注意到Unity的第三人称控制员的地面检查出现问题。 地面检查应检测玩家是否站在地面上。它是通过在播放器下方发出光线来实现的。 但是,如果玩家站在两个盒子的顶部和中间,并且在两个盒子之间有一个空间,则射线会射入空隙中,并且玩家会认为他没有与地面接触,如下所示: 我无法动弹。您可以清楚地看到射线在间隙中,因此播放器动画师的机载混合树处于活动状态。 解决此问题的最佳方法是什么? 我当时正在考虑从同一来源但以不同角度拍摄多条光线。并且OnGround仅当这些光线的X%到达“地面”时才应为真。或者,还有更好的方法?

2
在MMO的服务器端存储每个对象的坐标
在MMORPG中: 将每棵树,灌木丛等的坐标存储在服务器端以进行碰撞检测是典型的还是可行的? 如果是这样,什么是存储如此大量坐标(数据结构等性能问题处理)的可行方法? 如果不是,这种冲突检测是否完全在客户端完成,而服务器根本不检查? 还是有中间立场,由客户端检查冲突并由服务器验证?如果是这样,服务器又如何在不将坐标保存在服务器中的情况下进行验证?

6
检查两个移动的AABB是否相交的最快方法是什么?
我有两个正在移动的AABB,检查它们是否在框架下相交的最快方法是什么? 通过移动,我的意思是不仅要检查常用的矩形交集方法,还意味着某种简单易行的测试,该测试仅返回布尔值,没有命中时间或其他任何东西。 我认为就是这样简单地做到这一点: 但是那个Hexagon非常复杂,我不知道如何计算AABB-多边形相交,也许有更简单的方法吗? 您最喜欢的任何编程语言,我都可以轻松移植。 谢谢。

1
如何用矩形块制作曲面?
对于类似Peggle的游戏,我要制作遵循曲线的块,如下所示: 然后,当球击中障碍物时,障碍物将消失。 我设法水平绘制了一些,但是在使它们遵循一条路径时遇到了麻烦: 我该怎么做呢?是否需要使用自定义顶点创建Box2D对象?

2
什么是“距离场”,它们如何适用于碰撞检测?
当我遇到“距离场”时,我正在寻找一些有效的方法来检测具有静态和动态对象的场景中的碰撞。 我试图搜索并理解这个概念,但是我只能找到用非常复杂的语言撰写的论文。有人可以用简单的单词解释什么是距离场,以及如何将其用于碰撞检测?

3
如何实现门户网站的冲突检测?
例如,采用这种情况(对不起,我的绘画技巧很差): 这是基于“门户”的,火柴人正在通过蓝色门户(链接到红色门户),但是有一堵墙阻止他在红色门户上。因此,他无法完全通过门户。 所以我的问题是:如何与他们进行物理/碰撞检测?我会切播放器吗?有没有办法链接它们?是否有任何物理引擎支持此操作?如果没有,我该怎么做?

3
曲线碰撞检测
我正在开发2D游戏,其中我想在运动的圆和某种静态曲线(可能是贝塞尔曲线)之间进行碰撞检测。 目前,我的游戏仅以直线作为静态几何图形,并且我正在通过计算从圆到线的距离进行碰撞检测,并在距离小于圆半径的情况下将圆投影到线外。 如何以相对简单的方式进行这种碰撞检测?例如,我知道Box2D具有Bezier曲线的碰撞检测功能。我不需要功能齐全的碰撞检测机制,只需执行我描述的操作即可。 更新:非常感谢您的出色回答!我必须阅读Bezier曲线才能完全理解您所描述的方法。那我会回覆您。

2
实体系统中的碰撞检测和响应
ES带来更多乐趣... 目前,我有一些系统: 渲染器(Renderable属性,Transform属性) 运动(可移动属性,变换属性,可渲染属性(用于边界框等)) 输入(InputReceiver属性) 等等 我要添加碰撞检测。我的第一个想法是添加一个执行碰撞的新系统。这对我来说很有意义,以防止这种分离的Motion系统,因为不是所有的东西,移动,或者动画不一定参与碰撞检测-摄像机,雾等-但似乎Collision和Motion相互依存。 当Motion移动实体,变换需要与被验证Collision,且移动或者取消,或调节(弹跳,停在一个壁等)。 一种替代方法是创建一个Collidable属性,该属性维护对碰撞对象(kd-tree,八叉树等)的引用,该引用在可以相互碰撞的实体之间共享。然后,Motion系统将检查该属性,并使用它来检查或调整移动。 从代码角度来看,这是一个可以接受的解决方案。但是,从ECS架构的角度来看,似乎是将逻辑推入Motion系统中,而该逻辑不适用于具有Movable属性的所有实体。 我还可以在Movable属性中存储一个运动矢量,并使Collider系统Transform根据需要进行调整,但这将涉及在Motion和之间复制功能Collider,或者从Collider到Motion进行回调,并提供一些有关碰撞位置和曲面数据的反弹/反射等信息。 。 这可能属于“特殊情况破解”的标题,但是我想从以前处理过此问题的人员那里得到一些输入而无需创建大量的边缘案例代码。 问题 当运动系统和碰撞系统似乎需要彼此了解时,如何避免它们之间的紧密耦合?

4
用SAT查找接触点
分离轴定理(SAT)使确定最小平移向量(即可以分离两个碰撞对象的最短向量)变得简单。但是,我需要的是沿着穿透物体正在移动的向量(即接触点)将物体分开的向量。 我画了一幅画以帮助澄清。有一个框,从前面的位置移动到后面的位置。在其后位置,它与灰色多边形相交。SAT可以轻松返回MTV,这是红色矢量。我正在寻找计算蓝色向量。 我当前的解决方案在前后位置之间执行二进制搜索,直到已知蓝色矢量的长度达到某个阈值为止。它可以工作,但是这是一个非常昂贵的计算,因为需要在每个循环中重新计算形状之间的冲突。 有没有更简单和/或更有效的方法来找到接触点矢量?

3
有没有一种好的方法可以在XNA中获得像素完美的碰撞检测?
XNA中是否有一种众所周知的方法(或者也许是可重用的代码)用于像素完美碰撞检测? 我假设这还将多边形(框/三角形/圆形)用于首过,碰撞的快速测试,如果该测试表明有碰撞,则它将搜索每个像素的碰撞。 这很复杂,因为我们必须考虑比例,旋转和透明度。 警告:如果您使用的是来自以下答案的链接中的示例代码,请注意,矩阵的缩放比例已被注释掉,这是有充分理由的。您无需取消注释即可开始扩展。

5
2D关卡设计/编辑/保存问题[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我考虑过要制作一个像SuperMario这样的简单2D Sidescroller游戏。然后我想知道如何保存,加载或创建游戏关卡。我想到的第一件事是绘制一个简单的块状png来表示水平,这使玩家可以行走的所有部分都具有特殊的颜色(也许是淡紫色)。我将以块或图块的形式导入级别,以便检查碰撞。 所以我的问题是: 有更好的方法吗? 有哪些专业方法? 我应该使用Tiles和基于Tile的地图编辑器来做到这一点吗?(出于某种原因,我不喜欢这种方法,但是我想我是否会使用它的最佳方法) 基于图块的水准仪,您将如何认识坡度,以及如何检查坡口是否发生碰撞?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.