我正在使用LibGDX构建一个2D游戏。我有一个集合的实体,每一个与他们自己的X和Y立场在‘世界’。播放器在世界各地移动,也有自己的X和Y世界坐标,我使用LibGDX OrthographicCamera,它更新了每个循环,以播放器位置为中心。玩家的前进方向总是相对于视口向北。
我想要的是能够“旋转”播放器的视图(基本上是通过使用播放器位置/摄像机中心点作为起源的世界物体的反向旋转)。
我试图用仿射变换来做这件事。我曾经尝试过这样的东西,每次渲染都是为世界实体调用的。
Affine2 af = new Affine2();
af.translate(player.x, player.y); // Move origin to centerpoint
af.rotate(entity.rotation); // For testing this value has 1 added or subtracted to it
// when I hold down Q and E to simulate the camera rotation.
af.translate(-player.x, -player.y); // Reset origin transform
af.translate(entity.x, entity.y); // Move to world location
.... // Draw with the af matrix
一开始我没有意识到的是,一旦旋转完成,它也会旋转X和Y轴。因此,任何后续的平移都是相对于旋转进行的,而不是沿着原始的垂直和水平对齐轴,因此这些物体根本没有在正确的位置结束,而且它们在玩家移动时移动,这是不正确的行为。
什么是正确的方法来计算转换,这样我就可以围绕玩家旋转这些实体,然后根据旋转将它们移动到正确的世界位置?
我不确定我是否解释得太好了,所以我画了一些东西来更好地展示这一点:
因此,当我希望视图顺时针方向旋转时,物体会逆时针方向围绕播放器位置旋转(点绿色框),但是如果播放器在世界各地移动(即向前、向后、左、右),那么实体位置就不应该改变。
编辑:经过更多的思考之后,我想知道我是不是完全走错了路?我仍然需要角色的X/Y是“正确的”在世界内的旋转基础上,所以实际上我应该是旋转的球员,然后也是世界的看法?
发布于 2016-12-06 09:57:08
这通常是通过创建视图矩阵来解决的,但是由于您使用的是libgdx,所以您可以使用相机的平移和旋转方法。
Camera#translate(float x, float y, floaf z)
Camera#rotate(float angle, float x, float y, float z) // Set the axis you're currently rotating around to 1
Camera#zoom(float n)
发布于 2016-10-22 09:46:50
假设你的意思是,当你旋转字符时,物体会旋转,所以它看起来像你的另一面,那么相机应该旋转,而不是物体。
https://gamedev.stackexchange.com/questions/131859
复制相似问题