所以,我让这段代码为 AABB 碰撞工作,直到我决定在 Y 轴上制作一个比在 X 轴上更大的精灵。我试图修复代码,但现在它只是将碰撞大小比实际精灵大小增加了一倍。前任。精灵 1 iVec2(50,100) 的大小,精灵 2 iVec2(30,30) 的大小。
CollisionData Collision::DoCollision(GameObject &object1, GameObject &object2) {
iVec2 center(object1.Position.x + object1.Size.x / 2, object1.Position.y + object1.Size.y / 2);
iVec2 half_extents(object2.Size.x / 2, object2.Size.y / 2);
iVec2 aabb_center(object2.Position.x + half_extents.x, object2.Position.y + half_extents.y);
iVec2 difference = center - aabb_center;
iVec2 difference2 = center - aabb_center;
iVec2 clamped = glm::clamp(difference, -half_extents, half_extents);
iVec2 clamped2 = glm::clamp(difference2, -iVec2(object1.Size.x / 2, object1.Size.y / 2), iVec2(object1.Size.x / 2, object1.Size.y / 2));
iVec2 closest = aabb_center + clamped;
iVec2 closest2 = aabb_center + clamped2;
difference = closest - center;
difference2 = closest2 - center;
if (glm::length(difference) <= object1.Size.x / 2 || glm::length(difference2) <= object1.Size.y / 2)
return std::make_tuple(GL_TRUE, VectorDirection(difference), difference);
else return std::make_tuple(GL_FALSE, UP, glm::vec2(0, 0));
}