首页 > 解决方案 > (Libgdx && PhysicsEditor) 2 个围绕不同原点旋转的物体,用于我需要始终重叠的不同检测

问题描述

由于物理编辑器原点,我使用物理编辑器主体进行碰撞检测,并使用 b2body 进行一般定位和旋转。box2D 主体的原点位于其中心,而物理编辑器主体的原点位于左下方。它们中的任何一个都不能更改原点,并且它们需要始终直接位于彼此之上。由于将 PE 主体设置为 Box2D 主体位置的原点不同,导致 PE 主体位于 Box2D 主体的左上角。它们需要重叠。我需要一个数学公式来设置 PE 身体的变换。IE 如果它们具有相同的原点,则代码将如下所示:PEBody.setTransform(box2DBody.getPosition.x, box2DBody.getPosition.y, box2DBody.getAngle();但由于原点不同(同样,我无法更改),该代码导致:https: //www.youtube。

由于我的数学不太好,我不完全确定,但我认为这与三角函数有关,我正在寻找的是这样的:PEBody.setTransform(box2DBody.getPosition.x - *some formula based on box2DBody.getAngle()*, box2DBody.getPosition.y - *some formula based on box2DBody.getAngle()*, box2DBody.getAngle();

标签: mathlibgdx

解决方案


假设下图是 theta(旋转角度)为零的位置,

θ = 0

那么下面的代码行应该可以工作:

PEBody.setTransform( box2DBody.getPosition.x + box2DBody.getWidth() * 0.5 * cos(box2DBody.getAngle()) + box2DBody.getHeight() * 0.5 * sin(box2DBody.getAngle()), box2DBody.getPosition.y + box2DBody.getHeight() * 0.5 * cos(box2DBody.getAngle()) + box2DBody.getWidth() * 0.5 * sin(box2DBody.getAngle()), box2DBody.getAngle()

.getWidth()and替换.getHeight()为您用于获取主体宽度和高度的任何函数,同样用于sin()and cos()


推荐阅读