1

我正在 XNA 中开发需要一些物理特性的 2D 游戏。我发现像 Farseer 这样的物理引擎不会因为它们的某些工作方式而削减它。(这是一个很长的故事,涉及重写代码 3 次最终弄清楚我需要自己编写物理。)所以根据我使用的参考资料,我现在需要的唯一数据是表面的法线碰撞。

这是使用 sprite 使用逐像素碰撞检测。我目前有一个包含所有重叠像素及其位置的数组。我想使用该数据来计算重叠像素的位置的平均值,以找出该表面的法线。这应该允许我与不规则形状的物体发生碰撞,但仍保持真实的物理交互。

如果有人对我如何使用这个像素信息来计算表面法线或足够接近的东西有任何建议,那就太好了。

谢谢。

4

3 回答 3

2

考虑存储精灵中每个点的法线(即在单独的纹理中)而不是尝试计算它们。通过这种方式,您将能够调整法线,使您的碰撞看起来“自然”(从您的游戏的意义上说,从物理学的角度来看,不一定是正确的)。

于 2011-05-16T17:14:44.130 回答
1

[已编辑] - 我更喜欢 Alexei 的精灵法线理念,而不是我的表格驱动方法,但仍然会添加......

您可能需要考虑是否能够将 2D 几何图形附加到每个精灵。它将使您能够进行真正的多边形碰撞。当您确定精灵碰撞时,请查看两个精灵的多边形并将标准碰撞物理应用于它们。

于 2011-05-16T17:19:57.987 回答
0

这可能会奏效:找到两个最糟糕的像素(每个身体一个)并在它们之间应用一个临时弹簧以将它们分开。基本上,无论哪个像素组合具有最大的重叠(与分离相反)并施加与重叠量成比例的力。这将为您的系统增加能量,因此请考虑添加阻尼器(力与相对速度成正比)。我经常使用的方程式是:

(reduced mass) = 1/( 1/(mass 1) + 1/(mass 2) )
(stiffness) = (reduced mass) * (response freq)^2
(damping) = (ratio)*(reduced mass) * (response freq)

我控制(response freq)(ratio)量以获得预期的效果。响应频率是您希望重叠自行校正的速度,“阻尼比”是一个正数,可以小于或大于一个,可以让您微调阻尼响应。

于 2011-05-16T17:39:58.590 回答