我的问题是,我的Box2D Body有另一个位置,而不是我要为该主体渲染的LibGDX Sprite。在我的渲染循环中,对于每个物体,我将它的精灵的位置设置为一个物体,然后渲染它。 当创建一个圆形以外的Box2D形状时,Box2D不会从它的原点移动它,也不会移动LibGDX-sprite。如果我现在移动或设置身体的位置,我的精灵将始终遵循它。但是,不幸的是,CircleShapes无法做到这一点:由于LibGDX的Sprite#setPosition没有考虑精灵的原点(仅用于缩放和旋转),精灵由它的左下角设置。所以这就是问题:Box2D CircleShape是通过考虑原点来移动的!所以我的精灵总是从形状的起源开始。有谁知道如何解决这个问题?而且,最终,我想总是移动两个,同时考虑到原点。我该怎么做?
答案 0 :(得分:2)
Box2d的身体原点永远不会改变。圆形和框形的原点是中间的,多边形的原点是左下角。
修复它的唯一方法是,将精灵原点更改为Sprite.setOriginCenter();
的中间。
如果body是圆形或方框形状,精灵位置设置为如sprite.setPosition(body.getPosition().x - sprite.getWidth()/2, body.getPosition().y - sprite.getHeight()/2);
如果body是多边形,则代码应该类似于sprite.setPosition(body.getPosition().x, body.getPosition().y);
。