XNA - 与相机一起移动的对象与不是

时间:2015-07-21 09:52:50

标签: c# camera xna

我正在开发2D游戏,现在我面临一个问题,即我无法解决问题。在我的项目中,我首先绘制了不随相机移动的东西,而不是那些总是停留在同一个地方的东西(主要是UI元素)。我的游戏鼠标矩形设置为鼠标位置+相机中心的X和Y.

所以,虽然玩家可以点击UI元素(我现在使用鼠标和按钮之间的相交功能,我将UI的大部分工作留到了最后),如果我尝试在鼠标和实际用相机移动的任何东西之间进行任何交互,它不起作用,因为鼠标的坐标"比较"相机,而物体不是,我不知道如何使它工作。

以下是相机的代码:

class Camera
{
    public Matrix transform;
    Viewport view;
    Vector2 centre;
    int x;
    int y;

    float zoom;

    public Camera(Viewport newView)
    {
        view = newView;
        x = 0;
        y = 0;
        zoom = 1;
    }

    public Vector2 getCentre()
    {
        return this.centre;
    }

    public void Update(GameTime gametime)
    {
        if (Mouse.GetState().Y < 45 && y >= 5)
            y -= 3;
        if (Mouse.GetState().Y > 400 && y < 650)
            y += 3;
        if (Mouse.GetState().X > 580 && x < 90)
            x += 3;
        if (Mouse.GetState().X < 60 && x > -100)
            x -= 3;
        centre = new Vector2(x, y);

        transform = Matrix.CreateScale(new Vector3(1,1,0)) * Matrix.CreateTranslation(new Vector3(-centre.X,-centre.Y,0));
    }

}

1 个答案:

答案 0 :(得分:0)

Viewport.Unproject方法将屏幕空间中的矢量转换为世界空间中的矢量。

使用带有X和Y鼠标坐标的矢量以及投影视图世界矩阵提供它。结果将是您世界空间中的矢量。您可以使用它的坐标来比较对象边界。

如果您需要鼠标指针之间的交叉点不是一个点,而是一个矩形,并且某个对象的边界矩形,则相反的方法Viewport.Project可能有所帮助。 你需要的是投射运动物体的边界矩形的左上角和右下角矢量,使用结果矢量构建矩形,并调用结果矩形和鼠标矩形之间的相交。