2012-02-26 68 views
0

我們正在爲WP7開發一個實時策略變量。在這方面,我們需要一些方向/指導如何建立一個有效的相機系統。換句話說,我們希望有一臺能夠在平面上平移的攝像機(2D或3D水平地圖)。我們一直在試驗一個2D地圖,而我們的單位/角色都是3D模型。Windows Phone XNA:實時策略相機

乍一看,我們需要弄清楚如何計算相機周圍的邊界框及其整個視角。或者,將攝像機的移動限制在可以看到的地方,移到二維地圖的邊界。

任何幫助將不勝感激!

乾杯

回答

1

如果你做真正的2D滾動,這是很簡單的:

  • Scroll.X必須在0和level.width之間 - screen.width
  • Scroll.Y必須在0和level.height之間 - screen.height

(使用MathHelper.Clamp幫助您與此)

至於3D,它有點棘手,但幾乎相同的原則。

所有你真正需要的是定義兩個Vector3分,一個是左下角,另一個是右上方(或者你可以做左上/右下,等等,直到你)。這些將是你的界限值。

第一個你可以定義爲readonly只是常數值,你調整相機邊界完全按照你希望的角落。有一種計算方法,但老實說我更喜歡有更多的控制權,所以我通常選擇調整價值的路線。

第二個你可以開始與「基地」,你可以手動調整(或計算)就像以前一樣,但這次你必須添加地圖的寬度和長度(X和Z),所以你知道取決於您加載的地圖的真實邊界。

一旦你有了這些值,它們夾緊和以前一樣:

//pans the camera but caps at bounds 
    public void ScrollByCheckBounds(Vector3 scroll, Vector3 bottomLeftFront, Vector3 topRightBack) 
    { 
     Vector3 newScroll = Scroll + scroll; 

     //clamp each dimension 
     newScroll.X = MathHelper.Clamp(newScroll.X, topRightBack.X, bottomLeftFront.X); 
     newScroll.Y = MathHelper.Clamp(newScroll.Y, topRightBack.Y, bottomLeftFront.Y); 
     newScroll.Z = MathHelper.Clamp(newScroll.Z, bottomLeftFront.Z, topRightBack.Z); 
     Scroll = newScroll; 
    }