2015-07-21 66 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可能會有所幫助。 您需要的是投影移動物體的邊界矩形的左上角和右下角矢量,使用結果矢量構建矩形,並調用結果矩形和鼠標矩形之間的相交。