首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何在给定的点周围旋转物体,然后将它们移动到正确的世界位置?

我如何在给定的点周围旋转物体,然后将它们移动到正确的世界位置?
EN

Game Development用户
提问于 2016-10-21 20:58:27
回答 2查看 1.3K关注 0票数 0

我正在使用LibGDX构建一个2D游戏。我有一个集合的实体,每一个与他们自己的X和Y立场在‘世界’。播放器在世界各地移动,也有自己的X和Y世界坐标,我使用LibGDX OrthographicCamera,它更新了每个循环,以播放器位置为中心。玩家的前进方向总是相对于视口向北。

我想要的是能够“旋转”播放器的视图(基本上是通过使用播放器位置/摄像机中心点作为起源的世界物体的反向旋转)。

我试图用仿射变换来做这件事。我曾经尝试过这样的东西,每次渲染都是为世界实体调用的。

代码语言:javascript
运行
复制
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是“正确的”在世界内的旋转基础上,所以实际上我应该是旋转的球员,然后也是世界的看法?

EN

回答 2

Game Development用户

发布于 2016-12-06 09:57:08

这通常是通过创建视图矩阵来解决的,但是由于您使用的是libgdx,所以您可以使用相机的平移和旋转方法。

代码语言:javascript
运行
复制
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)
票数 1
EN

Game Development用户

发布于 2016-10-22 09:46:50

假设你的意思是,当你旋转字符时,物体会旋转,所以它看起来像你的另一面,那么相机应该旋转,而不是物体。

票数 0
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/131859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档