由于物理编辑器的原点,我将使用Physics Editor主体进行碰撞检测,并使用b2body进行常规定位和旋转。 box2D实体的原点位于其中心,而Physics Editor实体的原点位于左下方。它们中的任何一个都不能更改原点,并且它们必须始终直接位于彼此之上。由于原点的不同,因此将PE主体设置为Box2D主体的位置会导致PE主体位于Box2D主体的左上角。它们需要重叠。我需要一个数学公式来设置PE主体的变换。 I.E如果它们具有相同的原点,则代码将如下所示:PEBody.setTransform(box2DBody.getPosition.x, box2DBody.getPosition.y, box2DBody.getAngle();
,但是由于原点不同(同样,我无法更改),该代码将导致以下结果:https://www.youtube.com/watch?v=UeXB6nrGePg
由于我不太擅长数学,所以我不确定,但是我认为这与三角学有关,我正在寻找的东西是这样的:PEBody.setTransform(box2DBody.getPosition.x - *some formula based on box2DBody.getAngle()*, box2DBody.getPosition.y - *some formula based on box2DBody.getAngle()*, box2DBody.getAngle();
答案 0 :(得分:0)
假设下面的图像是theta(旋转角度)为零的地方,
然后下面的代码行应该起作用:
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()
和.getHeight()
替换为您用来获取主体的宽度和高度的任何函数,并同样替换sin()
和cos()
。