我們正在爲WP7開發一個實時策略變量。在這方面,我們需要一些方向/指導如何建立一個有效的相機系統。換句話說,我們希望有一臺能夠在平面上平移的攝像機(2D或3D水平地圖)。我們一直在試驗一個2D地圖,而我們的單位/角色都是3D模型。Windows Phone XNA:實時策略相機
乍一看,我們需要弄清楚如何計算相機周圍的邊界框及其整個視角。或者,將攝像機的移動限制在可以看到的地方,移到二維地圖的邊界。
任何幫助將不勝感激!
乾杯
我們正在爲WP7開發一個實時策略變量。在這方面,我們需要一些方向/指導如何建立一個有效的相機系統。換句話說,我們希望有一臺能夠在平面上平移的攝像機(2D或3D水平地圖)。我們一直在試驗一個2D地圖,而我們的單位/角色都是3D模型。Windows Phone XNA:實時策略相機
乍一看,我們需要弄清楚如何計算相機周圍的邊界框及其整個視角。或者,將攝像機的移動限制在可以看到的地方,移到二維地圖的邊界。
任何幫助將不勝感激!
乾杯
如果你做真正的2D滾動,這是很簡單的:
(使用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;
}