2013-02-08 26 views
0

當您必須在遊戲的上下文中顯示一系列可視組件(精靈)時,每個需要相對於高度&寬度的目標設備的視口(不一定縱橫比)的:在MonoGame中爲目標視口大小/設備縮放精靈(不是紋理)

  • 是否有一個縮放類來幫助想出基於當前設備視口大小以動態方式縮放比率?
  • 我需要推出自己的縮放比例算法嗎?
  • 我應該注意的任何跨平臺問題?

這不是與資產相關的加載一個問題基於目標設備上也不是如何執行的子畫面的縮放(在此所說明:http://msdn.microsoft.com/en-us/library/bb194913.aspx)一個問題,如何而一個問題根據查看端口大小確定精靈的比例。

+0

什麼尺寸的精靈比例尺與哪個視口有多大?一個例子會很棒。 – user1306322

回答

2

您可以隨時創建自己的縮放實現。

例如,默認的目標視窗尺寸爲:

const int defaultWidth = 1280, defaultHeight = 720; 

和當前的屏幕尺寸爲800×600,它給你(我們使用的Vector2,而不是兩個浮點數):

int currentWidth = GraphicsDevice.Viewport.Width, 
    currentHeight = GraphicsDevice.Viewport.Height; 

Vector2 scale = new Vector2(currentWidth/defaultWidth, 
          currentHeight/defaultHeight); 

這給你一個{0.625; 0.83333}。現在,您可以在一個方便的SpriteBatch.Draw()overload,需要一個Vector2縮放變量使用:

public void Draw (
    Texture2D texture, 
    Vector2 position, 
    Nullable<Rectangle> sourceRectangle, 
    Color color, 
    float rotation, 
    Vector2 origin, 
    Vector2 scale, 
    SpriteEffects effects, 
    float layerDepth 
) 

或者,你可以得出你的東西到RenderTarget2D和生成的圖像從那裏複製到拉伸紋理在主屏幕上,但這仍然需要上述SpriteBatch.Draw()超載,但如果您有大量繪製調用,它可能會節省您的時間。

+0

這是肯定的答案,但是對於我的需求來說,縮放比例與敲擊手勢檢測(沒有提到問題)有關。我的答案以一種非常簡單的方式解決了我的問題,但我知道這可能不是最簡潔的解決方案。這就是爲什麼我將此標記爲正確答案。 – holsee

+0

嗨,我已經使用了這些代碼,能否請你告訴我如何在此之後縮放觸摸輸入...... –

+0

@uncle_scrooge如果你想要一個不同的問題的答案,你應該找到這樣一個問題或問它,不發表評論。 – user1306322

1

另一種選擇,以產生規模將槓桿:

var scaleMatrix = Matrix.CreateScale(
      (float)GraphicsDevice.Viewport.Width/View.Width, 
      (float)GraphicsDevice.Viewport.Width/View.Width, 1f); 

http://msdn.microsoft.com/en-gb/library/bb195692.aspx。但是這並不符合我的需要,因爲我不得不將自己的轉換映射到「已轉換」的精靈(通過了解他們自己的位置和大小來響應用戶的觸摸輸入)來映射觸摸輸入位置。

最後我使用了基於百分比的方法。

我基本上得到了視口的高度和寬度...

GraphicsDevice.Viewport.Width 
GraphicsDevice.Viewport.Height 

...然後計算我的小精靈(注的高度和寬度:「在問題中提到,他們採取文字高度和寬度「)根據他們的相對大小來使用屏幕百分比。

//I want the buttons height and width to be 20% of the viewport 
var x, y = GraphicsDevice.Viewport.Width * 0.2f; //20% of screen width 
var btnsize = new Vector(x,y); 
var button = new GameButton(btnsize); 

然後,一旦我有按鈕,我能夠計算在屏幕上的位置來渲染基於按鈕的大小和可用的視口大小的按鈕的大小,對在相對位置的工作總部設在百分比。