c# - XNA 碰撞检测与游戏速度

标签 c# xna collision-detection xna-4.0

我已经使用 C# 编码多年,现在决定尝试使用 XNA 框架来制作游戏。

在我开始在我的非常简单的游戏中实现碰撞处理之前一切都很顺利。

我可以理解如何使用 BoundingBoxes 和 BoundingSpheres 进行碰撞检测,但在查看我的游戏中的刷新率后,如果两个碰撞对象从未被检测为碰撞,我很快就会担心。

让我试着用一个例子来解释: - 如果一个角色正在用枪射击另一个角色。 - 子弹直奔另一个角色。 - 子弹在角色之前渲染。 - 由于子弹速度很快,它现在会在角色的另一侧呈现。

在这种情况下,子弹和角色永远不会发生碰撞,因为它们永远不会在碰撞状态下呈现。

那么在这种情况下如何确保检测到碰撞?

最佳答案

对于移动速度非常快的物体,常规方法在您描述的场景中会失败。您需要检查的是子弹是否与两个连续游戏刻度之间的间隔内的任何项目发生碰撞。这叫做 continuous collision detection (this is a rather related SO post) .

您基本上可以通过在当前位置的子弹绑定(bind)框的中间和旧位置的框的中间之间转换光线,并检查那个 与任何其他方 block /球体发生碰撞。这是一个相当快速的解决方案,如果您的子弹足够小,它应该可以正常工作。

为了更精确,您可以从当前弹框的每个角转换四种不同的所谓碰撞射线,到它们在上一个游戏刻度中的相应位置。请注意,在极少数情况下,高速元素比子弹还小,这也可能会失败。在这种情况下,您需要更先进的碰撞检测系统。但这只是一个极端情况。

如果额外的精度是必须的,一个免费的 3D 物理库,例如 Bullet可以代表一个解决方案。它甚至有 bindings for XNA !

关于c# - XNA 碰撞检测与游戏速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11592440/

相关文章:

c# - 在没有 Visual Studio 的机器上从 IIS 运行 ASP.Net 网页

c# - 无法将 WP 8.1 应用程序部署到移动设备

python - 如何检测矩形对象、图像或 Sprite 何时被单击

html - 有谁知道是否有用于 HTML5 Canvas 的碰撞检测 API ..?

c++ - 连续碰撞检测——如何在 C++ 中根据这两个方程找到碰撞

c# - Serilog 实现打破了其他配置

c# - Android Facebook unity 5.0.3 插件问题

.net - Visual Studio 2013 的 XNA

c# - xna 4 渲染目标与 alpha channel

XNA SoundEffect 无法从文件加载