Questions tagged «collision-detection»

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

6
碰撞引擎如何工作?
碰撞引擎如何工作? 这是一个极为广泛的问题。什么代码使事物相互碰撞,什么代码使玩家走进墙壁而不是穿过墙壁?代码如何不断刷新玩家的位置和物体的位置,以保持重力和碰撞正常进行? 如果您不知道碰撞引擎是什么,基本上它通常用于平台游戏中,以使玩家疯狂撞墙等。有2D类型和3D类型,但是它们都完成相同的事情:碰撞。 那么,是什么让碰撞引擎滴答答答呢?


9
如何避免玩家与世界之间的循环依赖?
我正在开发2D游戏,您可以在其中上下左右移动。我基本上有两个游戏逻辑对象: 玩家:相对于世界的位置 世界:绘制地图和玩家 到目前为止,World依赖于Player(即具有对它的引用),需要其位置来确定在何处绘制玩家角色以及要绘制地图的哪一部分。 现在,我想添加碰撞检测,以使玩家无法穿过墙壁。 我能想到的最简单的方法是让玩家询问世界是否可以进行预期的移动。但这会在播放器和世界之间引入循环依赖关系(即,每个都有对另一个的引用),这似乎值得避免。我想出的唯一方法是让World移动Player,但是我发现这有点不直观。 我最好的选择是什么?还是避免循环依赖不值得?

10
最有效的AABB与Ray碰撞算法
是否有已知的“最有效”算法用于AABB与射线碰撞检测? 我最近偶然发现Arvo的AABB vs Sphere碰撞算法,我想知道是否有类似的算法值得关注。 此算法必须满足的条件是,我需要选择查询结果以了解从射线的原点到碰撞点的距离。话虽如此,如果还有另一个更快的算法不返回距离,那么除了发布一个可以返回距离的算法之外,发布该算法的确非常有用。 还请说明函数的return参数是什么,以及如何使用它返回距离或“无冲突”情况。例如,它是否具有用于距离的out参数以及bool返回值?还是只是返回一个带距离的浮点数,而不是-1的无碰撞? (对于那些不知道的人:AABB =轴对齐的边界框)

7
2D Platformer AABB碰撞问题
我的AABB冲突解决方法有问题。 我先解析X轴,然后解析Y轴,以解决AABB相交问题。这样做是为了防止此错误:http : //i.stack.imgur.com/NLg4j.png 当物体移入播放器且必须水平推动播放器时,当前方法可以正常工作。如您在.gif文件中所见,水平尖峰正确地推动了播放器。 但是,当垂直峰值移动到播放器中时,X轴仍将首先解析。这使得“将钉鞋用作升降机”是不可能的。 当玩家进入垂直尖峰(受重力影响而掉入)时,他被推向Y轴,因为开始时X轴上没有重叠。 我尝试过的方法是此链接的第一个答案中描述的方法:2D矩形对象碰撞检测 但是,尖峰和移动的对象是通过更改位置而不是速度来移动的,直到调用Update()方法之前,我才计算它们的下一个预测位置。不用说此解决方案也不起作用。:( 我需要以上述两种情况都可以正常工作的方式解决AABB碰撞。 这是我当前的碰撞源代码:http : //pastebin.com/MiCi3nA1 如果有人可以研究这个问题,我将非常感激,因为这个错误从一开始就一直存在于引擎中,并且我一直在努力寻找一个好的解决方案,但没有成功。这严重使我整夜都在看碰撞代码,并阻止我进入“有趣的部分”并对游戏逻辑进行编码:( 我尝试实现与XNA AppHub平台演示中相同的碰撞系统(通过复制粘贴大部分内容)。但是,“跳跃”错误发生在我的游戏中,而AppHub演示中没有发生。[跳虫:http : //i.stack.imgur.com/NLg4j.png ] 要跳,我检查播放器是否为“ onGround”,然后将-5添加到Velocity.Y。 由于玩家的Velocity.X高于Velocity.Y(请参见图中的第四个面板),因此onGround在不应该设置为true时设置为true,从而使玩家跳入半空中。 我相信这在AppHub演示中不会发生,因为播放器的Velocity.X永远不会高于Velocity.Y,但我可能会误会。 我先在X轴上解析,然后在Y轴上解析,从而解决了这个问题。但是,如上所述,这加剧了与尖峰的碰撞。

4
球撞到角落,它将在哪里偏转?
我需要复习三角函数,希望您可以通过简单的数学模型为您提供帮助。到目前为止,这是我在模型中附加的模型。我知道当球快速移动时帧动画还有其他问题,但是现在我只需要计算ballDx和ballDy。ballDx = 0(仅垂直运动)也是可能的,但是当球偏斜时,ballDx可能会获得不同的值。

5
游戏中的演员应该负责吸引自己吗?
我对游戏开发非常陌生,但对编程却不是。 我(再次)使用JavaScript的canvas元素在玩Pong类型的游戏。 我创建了一个Paddle具有以下属性的对象... width height x y colour 我也有一个Pong具有诸如...的属性的对象 width height backgroundColour draw()。 该draw()方法当前正在重置canvas,这就是出现问题的地方。 如果Paddle对象具有draw()负责其绘制的方法,或者draw()该Pong对象的负责负责其演员的绘制(我认为这是正确的术语,如果我不正确,请更正我)。 我发现在Paddle实例化两个对象Player和时,绘制自身会很有利Enemy。如果在没有Pong的draw(),我需要两次写类似的代码。 最佳做法是什么? 谢谢。

6
快速移动物体的六角形碰撞检测?
对象具有位置和速度矢量。通常仅使用该位置来检查两个物体是否发生碰撞,这对于移动速度非常快的物体是有问题的,因为可能发生物体移动得如此之快,以至于在第一次碰撞检查中它位于第一个物体的前面,而在第二个碰撞检查中位于它的后面第二次碰撞检查。 现在,还有基于行的碰撞检查,其中您仅检查每个对象的运动矢量是否与另一个对象的边界框相交。这可以看作是一点的扩展。这仅在快速移动的物体很小的情况下才有效。 所以我的想法是,为什么不扩展矩形而不是扩展点?这将产生一个六边形。 现在,到目前为止一切顺利。但是我实际上如何检查两个这种六角形是否相交?请注意,这些是非常特殊的六角形。 奖励问题:是否可以计算出碰撞发生的确切位置(或确切地说,经过多少时间)?这对于检测实际发生的情况(例如在何处以及具有多少功率)以及模拟它们在碰撞到帧结束之间的时间中如何移动非常有用。

6
如何计算点和与轴对齐的矩形之间的距离?
我有一个带有x,y位置,高度和宽度的2D矩形,并且附近有一个随机定位的点。 有没有一种方法可以检查如果该点比一定距离更近,则该点是否可能与矩形碰撞?想象一下该点之外的不可见半径与所述矩形碰撞。我有一个问题,仅仅是因为它不是正方形!


6
如何决定哪个GameObject应该处理碰撞?
在任何碰撞中,都涉及两个GameObjects,对吗?我想知道的是,如何确定哪个对象应包含我的对象OnCollision*? 作为示例,假设我有一个Player对象和一个Spike对象。我首先想到的是在播放器上放一个脚本,其中包含一些如下代码: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Spike")) { Destroy(gameObject); } } 当然,可以通过在Spike对象上包含一个包含以下代码的脚本来实现完全相同的功能: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Player")) { Destroy(coll.gameObject); } } 虽然两者都有效,但在Player上放置脚本对我来说更有意义,因为在这种情况下,发生碰撞时,正在对Player进行操作。 但是,令我感到怀疑的是,将来您可能希望添加更多会在碰撞时杀死播放器的对象,例如敌人,熔岩,激光束等。这些对象可能具有不同的标签。因此,播放器上的脚本将变为: OnCollisionEnter(Collision coll) { GameObject other = coll.gameObject; if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) { Destroy(gameObject); } } 而在脚本位于Spike上的情况下,您要做的就是将相同的脚本添加到所有其他可能杀死Player的对象上,并命名该脚本为KillPlayerOnContact。 另外,如果您在播放器和敌人之间发生碰撞,那么您可能想对两者都执行操作。那么在那种情况下,哪个对象应该处理碰撞?还是应该同时处理碰撞并执行不同的动作? 我以前从未开发过任何大小合适的游戏,而且我想知道,如果一开始就把这种事情弄错了,代码是否会变得混乱并且难以维护。也许所有方法都是有效的,这并不重要吗? 非常感谢任何见解!感谢您的时间 :)

7
有什么好的算法可以检测运动球体之间的碰撞?
如果(出于碰撞检测的目的)3D对象在游戏中由球体表示,那么检测球体之间的碰撞的好的算法是什么? 如果每个对象的位置都与上一帧相同,并且有一个新的(期望的)位置,那么一种好的算法可以识别出球体在前一帧中不相交并且在第二帧中不相交的碰撞,但它们确实在两者之间相交?

2
基于四叉树与网格的碰撞检测
我正在制作一个4人合作R型游戏,并且即将实现碰撞检测代码。我已经阅读了许多有关如何处理碰撞检测的文章和内容,但是我很难弄清楚该如何处理。似乎四叉树是最常用的方法,但是在某些资源中,他们提到了基于网格的解决方案。对于以前的游戏中使用网格进行检测的情况,我对此感到满意,但是它实际上比四叉树好吗?我不确定哪个提供了最佳性能,并且我还运行了一个基准测试,两种解决方案之间没有太大区别。 这个比那个好吗 ?或更优雅?我真的不确定应该使用哪一个。 欢迎任何建议。谢谢。

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

4
冲突检测应该在服务器端还是在客户端/服务器之间协同进行?
我正在开发一个在线游戏,该游戏将具有非常重的碰撞检测处理。播放器模型将与仅存在于服务器端(不存储在客户端数据文件中)的其他播放器,生物,建筑物,地形和实体对象发生冲突。 为了安全起见,我应该在服务器端进行所有冲突检测吗?还是应该让客户端进行检测,然后让服务器以某种方式进行跟进?我觉得服务器本身无法完成太多工作(我正在为一台服务器上的数百个播放器设计引擎)。 有谁知道主流MMO如何做到的?我知道目前几乎所有MMO都容易受到物理攻击,并且通常通过检测黑客和禁止人员来对其进行处理。我希望这些技巧根本不起作用,至少对于物理组件而言。

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.