0

我有一个使用笛卡尔坐标系布置的小型游戏关卡。我有一个相机类,我想使用这个矩阵将所有点从笛卡尔空间转换到等距空间:

[cos(45), sin(45)]

[-sin(45), cos(45)]

在纸上,将任何向量乘以矩阵成功地在第一次旋转后将该向量放入等距空间。

现在,我只能使用此矩阵根据摄像机位置绘制关卡:

public Matrix GetTransformation()
    {
        _mTransform =
            Matrix.CreateTranslation(-Position.X, -Position.Y, 0);

        return _mTransform;
    }

我感到困惑的地方是我上面列出的矩阵适合该等式的地方。

CameraIso2D 不带参数,但这里是 Draw 函数

public void Draw(SpriteBatch sb)
    {
        // Start drawing from this GameLayer
        sb.Begin(
            SpriteSortMode.FrontToBack,
            BlendState.AlphaBlend,
            null,
            null,
            null,
            null,
            _transformation);

        // Draw all contained objects
        foreach (DrawableGameObject dgo in _drawableGameObjects)
            dgo.Draw(sb);

        // End drawing from this GameLayer
        sb.End();
    }

_transformation 是每次更新从 CameraIso2D 返回的矩阵 _mTransform

4

1 回答 1

0

我通过使用两个矩阵解决了这个问题。第一个矩阵使用常规的相机变换,并作为变换矩阵传递给 spriteBatch.Begin。对于等距变换矩阵,我使用 Matrix.CreateRotationZ 来模拟等距 Y 轴旋转,然后我使用 Matrix.CreateScale 来模拟从 Y 轴向下的等距旋转。游戏对象需要笛卡尔坐标的位置,以及它们的等距坐标的向量2。将GameObject的笛卡尔坐标通过等距变换矩阵得到等距坐标,然后绘制到那个位置。

于 2013-10-16T14:54:51.047 回答