2011-11-13 74 views
3

現在我正在用2個for-loops平鋪一個Texture2D,類似於MonoGame samples的示例。MonoGame - 在iOS上貼圖Texture2D與SpriteBatch

我正在做一些閱讀,並且我看到使用兩個紋理(2,4,8,16,32等寬度爲&高度)的功率可以用一個SpriteBatch.Draw調用進行平鋪。

iOS支持MonoGame嗎?

我給了它幾次嘗試,無論它只是拉伸圖像而不是平鋪它。

我在我的SpriteBatch.Begin()上使用SamplerState.LinearWrap,並嘗試使用2048x128 png,並在512x32上嘗試過1/4大小,但沒有運氣。 (使用大尺寸,b/c我們的遊戲運行在2400xSomething縮小,B/C你可以放大2.5倍的相機)

+1

你提供給繪製方法的源矩形是什麼?你說它拉伸了圖像...這聽起來像你提供了一個包含整個圖像的矩形。 – dowhilefor

+0

我很快就會在這裏嘗試一下。一個問題是,我們使用了也是平鋪的圖像條(雨效應)。這可能不會一起工作,對吧?它需要在X/Y方向上平鋪,並且有4個框架通過在圖像條上移動源矩形來模擬降雨。我想我們必須爲每個幀使用不同的Texture2D,對吧? (假設確定源矩形的大小適用於我) – jonathanpeppers

+0

我認爲我的問題是這裏的XNA示例:http://msdn.microsoft.com/en-us/library/bb975153(v=xnagamestudio.30).aspx did not很好地解釋源矩形,@dowhilefor,發佈答案,我會將其標記爲已接受。 (可能會詳細說明如何在同一時間使用圖像條進行平鋪和動畫) – jonathanpeppers

回答

2

您可以使用draw method中的SourceRectangle參數。定義要顯示的紋理部分。假設你有一個128x128紋理。如果您提供Rect(0, 0, 128, 128),則告訴繪製方法使用整個紋理,如果您將null傳遞給繪製方法,則相同。如果您提供Rect(0, 0, 64, 64),則可以使用紋理的左上角部分。無論精靈本身有多大,你的精靈都會顯示這個部分。所以如果你的精靈是用128x128的大小繪製的,那麼64x64紋理部分就會被縮放。

現在,您可以將其用於動畫。如果您在紋理中存儲了一系列動畫(如this),則只需在每次要顯示序列中的下一張圖像時重新計算源矩形。

除此之外,您可以傳遞比源紋理更大的值。 XNA現在需要包裝或夾緊你的紋理。這樣你就可以實現簡單的平鋪。如果你需要的不僅僅是我的猜測,你需要使用手動方法,比如你的foreach循環。 請注意,只有在使用兩種紋理強度的情況下才支持包裹。