XNA -随相机移动的物体与不随相机移动的物体之间的交互作用

本文关键字:移动 相机 交互 作用 之间 XNA | 更新日期: 2023-09-27 18:03:58

我正在制作一款2D游戏,现在我面临着一个不解决它就无法继续的问题。在我的项目中,我首先绘制不随相机移动的东西,然后是始终停留在同一位置的东西(主要是UI元素)。我在游戏中鼠标的矩形被设置为鼠标位置+摄像机在X和y上的中心

所以,虽然玩家可以点击UI元素(我现在使用鼠标和按钮之间的Intersects功能,我把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));
    }
}

XNA -随相机移动的物体与不随相机移动的物体之间的交互作用

Viewport。取消投影方法将屏幕空间中的矢量转换为世界空间中的矢量。

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

如果你需要一个鼠标指针之间的交集不是作为一个点,而是作为一个矩形,与一些对象的边界矩形,相反的方法Viewport。项目可能会有帮助。你需要做的是投影移动对象的边界矩形的左上角和右下角向量,使用结果向量构建矩形,并调用结果矩形和鼠标矩形的交点