我有一个简单的游戏,我正在尝试以学习为目的,但矩阵有点难,尤其是在 DirectX 中。
我目前有一个 tilesystem,它在屏幕上呈现图 block 并在中心呈现一个字符位置(在启动时)
当玩家向左移动时,地面应该向右移动,这样他就始终位于屏幕中央。我使用 Sprite 来转换 Tiles 和玩家,但遇到了麻烦,因为地面在移动,而玩家仍然站在地面上,仍然位于中心。
这是一个自上而下的 2D 游戏,所以我只需要变换位置(可能还有旋转)
我的相机类有这个方法:
D3DXMatrixTransformation2D(&View, NULL, 0, &Scale, &Center, D3DXToRadian(Rotation), &Position);
我也试过(相机):
D3DXMatrixTranslation(&View, Position.x, Position.y, 0);
然后当我渲染地面 Sprite 时,我将其设置为转换为相机,但玩家有自己的矩阵,我在他移动时使用它。
和上面的一模一样,但是他的位置,旋转等等......
我缺少什么,我需要什么?
我只有一个适合屏幕宽度/高度的图 block 系统,所以我应该看到他何时移动,但他静止不动地站在中心和地面上,而玩家正在移动。
我是否需要反转矩阵以使地面沿相反方向移动?
只有玩家移动到这里,世界才会在他周围发生变化。
我必须说,作为游戏编程中排名第一的语言,很少有指南解释诸如“2D 俯视相机”之类的简单事物...
最佳答案
对于您的问题,您应该阅读一些关于不同空间的内容:对象空间、世界空间和相机空间。 (主要与 3D 空间相关,但我会尝试针对 2D 空间进行解释)
对象空间 每个对象都应该建模,或者在您的情况下绘制在对象空间中。这意味着对于每个对象,它们都是一个矩阵,它确定中心,例如您的播放器。
世界空间 这是你的游戏世界。它描述了场景中每个对象的位置和方向。
相机空间 这描述了您游戏世界的当前 View 。假定相机固定在屏幕中间,您移动整个世界以适应当前视点(例如,以负位置平移)。
对于您的情况,这意味着您需要为每个对象创建一个矩阵,它描述了图像在该位置(对象空间)正确居中的偏移量。然后你需要将对象转换到世界空间。因此,您需要一个包含对象位置和方向的矩阵,并将其与对象矩阵相乘。最后,您必须考虑视点并乘以相机矩阵,以便将对象从世界空间转换到 View 空间。生成的矩阵就是您用于渲染的矩阵。
希望对您有所帮助:)
关于c++ - 二维矩阵变换(有玩家和地面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14645560/