2013-05-12 46 views
1

我正在製作一款自下而上的策略/角色扮演/塔防XNA遊戲,適用於Windows,並且在縮放時遇到問題。XNA規模和渲染目標

我的顯示模式是1680 X 1050,這就是我將PreferredBackBuffer的寬度和高度設置爲。

我發現的是,當我使用相機對象放大和縮小(改變傳遞給SpriteBatch.Begin方法的矩陣的比例尺時,它會改變我的精靈的比例...但我仍然侷限於BackBuffer(0,0,1680,1050)...

我可以使用類似RenderTarget的東西來擴展在「地圖」上縮放/平移時可訪問的實際區域嗎?

我看使它像5000 X 3125 ...

任何想法/我應該如何處理這方面的例子?

我已經添加了什麼,我經歷的視頻... http://www.youtube.com/watch?v=jIiAeXbAnec

因爲我也張貼在Stack Exchange - Game Development

+0

有你試圖移動整個世界而不是相機?它應該具有相同的效果,並且不需要渲染較大的拓撲。 – ericosg 2013-05-13 06:09:56

+0

我有...但它仍然沒有幫助縮放...即使它放大和縮小,鼠標仍然包含在視口的縮放邊界...我想我來了它錯了......我正在考慮在精靈級而不是在全球級上縮放精靈...... – Patrick 2013-05-13 13:34:38

+0

我要記錄下午晚些時候發生的事情的視頻,一段視頻價值10,000字。 – Patrick 2013-05-13 13:35:19

回答

1

如果我理解正確,這個問題的記錄,座標你得到從Mouse.GetState()總是落在屏幕的範圍內(即:0 < x < 1680和0 < y < 1050)。

這是正常的。

您正在使用的變換矩陣正在座標「世界空間」,並把它們放在「客戶空間」(這是SpriteBatch然後使用投影精靈到屏幕上的空間)。

Mouse.GetState()也返回客戶端空間中的座標。你想要的是找到這些客戶端座標在世界空間中所代表的位置。所以你要做的是反向的轉變。下面是一些(未經測試)的代碼,告訴您如何:

MouseState mouseState = Mouse.GetState(); 
Matrix transform = whatever; 
Matrix inverseTransform = Matrix.Invert(transform); 
Vector2 clientMouse = new Vector2(mouseState.X, mouseState.Y); 
Vector2 worldMouse = Vector2.Transform(clientMouse, inverseTransform); 

(注意:如果你得到NaN的錯誤,確保你不結垢的Z座標下降到零,見here