2015-07-21 39 views
0

我正在开发2D游戏,现在我面临的一个问题是,如果不解决它,我就无法继续。在我的项目中,我首先画出不会随相机移动的东西,而不是那些始终停留在相同位置的东西(主要是UI元素)。我的游戏中鼠标的矩形设置为鼠标位置+ X和Y中的相机中心。XNA - 随相机移动的物体和不移动的物体之间的相互作用

因此,虽然玩家可以点击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)); 
    } 

} 

回答

0

Viewport.Unproject方法变换在屏幕空间矢量在世界空间向矢量。

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

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