我一直在使用阅读过的文章中的教程来编写此碰撞检测系统,但我终生无法使其正常运行100%。
这是入门的代码:
BoundingBox aBox;
aBox.Convert(a);
BoundingBox bBox;
bBox.Convert(b);
Vector2 aMin = aBox.GetTopLeft();
Vector2 aMax = aBox.GetBotRight();
Vector2 bMin = bBox.GetTopLeft();
Vector2 bMax = bBox.GetBotRight();
Vector2 minDistance;
float left = (bMin.x - aMax.x);
float right = (bMax.x - aMin.x);
float top = (bMin.y - aMax.y);
float bottom = (bMax.y - aMin.y);
// Check for intersection internally
if (left > 0 || right < 0) return;
if (top > 0 || bottom < 0) return;
// Find the minDistance
if (abs(left) < right)
minDistance.x = left;
else
minDistance.x = right;
if (abs(top) < bottom)
minDistance.y = top;
else
minDistance.y = bottom;
// Null axis with biggest value
if (abs(minDistance.x) < abs(minDistance.y))
minDistance.y = 0;
else
minDistance.x = 0;
现在的问题是角色可以很好地行走并拥抱积木的顶部和积木的底部,但是一旦他必须向上行走两个积木,他就会陷入其中。巧合的是,步行很完美。只是想知道是否有人可以解决此问题,将不胜感激!
这是一个gif,可以更好地显示问题:
最佳答案
嗯,这可能比实际解决方案更能解决问题,但是在处理输入时,您可以检查移动方向是否有空间。
如果向左上方移动,则可以检查左侧是否有空间,如果没有,则仅应用机芯的垂直方向。同样适用于四个方向。
这些错误中的大多数来自路由数字的工作方式,如果您想要一个一致且良好的行为,请研究如何避免出现这种舍入数字的情况,就像我刚才给您的示例中那样。