2015-09-04 45 views
2

因此,這裏是我的代碼:C#XNA - 通過項目迭代和畫他們

// Variables 
private SpriteFont font; 
private Vector2 fontPos, fontOrigin; 
private List<string> menuItems; 

// LoadContent() 
font = Content.Load<SpriteFont>("myFont"); 
fontPos = new Vector2(1920/2, 1080/2); 
menuItems = new List<string>(); 
menuItems.Add("Single Player"); 
menuItems.Add("Multi Player"); 
menuItems.Add("Achievements"); 
menuItems.Add("Options"); 
menuItems.Add("Quit Game"); 

// Draw() 
for (int i = 0; i < menuItems.Count; i++) 
{ 
    Vector2 fontOrigin = Game.gameFontLarge.MeasureString(menuItems[i])/2; 
    spriteBatch.DrawString(Game.gameFontLarge, menuItems[i], new Vector2(ScreenManager.Instance.Dimensions.X/2, ScreenManager.Instance.Dimensions.Y/2), Game.NoTint, 0.0f, fontOrigin, 1.0f, SpriteEffects.None, 0.0f); 
} 

到目前爲止,這個代碼繪製的一切,但所有的文本都繪製在彼此在同一個座標,屏幕的中心。如何使列表中的每個字符串都繪製在前一個字符下方,如前面的24像素?

回答

1

如果我正確地閱讀你的問題,當你繪製你的字符串時,你可以簡單地爲每個字符串的y值添加一個固定的像素量基於其索引。

所以你的行這裏:

spriteBatch.DrawString(. . . , new Vector2(ScreenManager.Instance.Dimensions.X/2, ScreenManager.Instance.Dimensions.Y/2), . . .); 

變得更加像下面這樣:

spriteBatch.DrawString(. . . , new Vector2(ScreenManager.Instance.Dimensions.X/2, (ScreenManager.Instance.Dimensions.Y/2) + 24 * i), . . .); 

希望這個解決方案適用於你 - 我不完全熟悉XNA,但是這應該是大概的概念。如果它給你一個類型不匹配的錯誤,你可能需要使用(float)i代替i

+0

謝謝!它的工作原理不需要'我'來浮動。正如我測試過的,'Vector2.Y'和'Vector2.X'是'float',但我不必在分區中投出'2',因爲浮點數可以被整數分開/相乘(可能不是在所有情況下,但這個確切情況並不需要劇組)。 – jacksparrow