处理2D图像和纹理——显示文字
?
問題
你想繪制一些文字,例如,顯示一些操作說明或當前得分。
解決方案
本章前四個教程中學習的SpriteBatch類也可以繪制文字。做法和繪制紋理幾乎是一樣的,只不過不是導入一個Texture2D,這次導入的是一個SpriteFont,它包含了你想使用的文字大小和類型。然后就可以使用SpriteBatch . DrawString方法繪制文字了。
工作原理
首先需要創建一個SpriteFont文件。右擊XNA項目的Content文件夾并選擇Add→New item。從對話框中選擇SpriteFont,起一個名稱(比如ourFont),然后點擊Add。
現在看到一個XML頁面。最重要的一行是設置FontName屬性,可以將這個屬性改成你想要繪制的字體。接下去一行可以設置字體大小,你也可以在以后縮放字體大小。
注意:你可以使用任何安裝在你的計算機上的TrueType字體。要看到已經安裝的字體,可以打開C:\WINDOWS\FONTS目錄(例如點擊Start按鈕,選擇Run,并輸入這個文件夾地址)。FontName列顯示了可以指定的所有字體。例如,如果字體名稱為Times New Roman (TrueType),你指定Times New Roman作為FontName 屬性。
注意:當在另一臺電腦上編譯代碼時,那臺電腦上也必須裝有這個字體,否則會報錯。
當心:當發布你的程序時,請確保你檢查了字體的版權。
創建了SpriteFont文件后,在類中添加一個SpriteFont變量:
SpriteFont myFont;在LoadContent方法中進行初始化:
myFont = Content.Load<SpriteFont>("ourFont");加載了SpriteFont對象后,就可以在Draw方法中繪制文本了:
spriteBatch.Begin(); string myString = "Elapsed seconds: " + gameTime.TotalGameTime.Seconds.ToString(); spriteBatch.DrawString(myFont, myString, new Vector2(50, 20), Color.Tomato); spriteBatch.End();SpriteBatch.DrawString有一些重載方法接受與SpriteBatch.Draw方法相同的參數,可見教程3-1見到具體解釋。
當心:如果你使用的是另一個SpriteBatch.Begin的重載方法,請確保指定 SpriteBlendMode.AlphaBlend作為第一個參數。否則,文字周圍的像素會變得不透明,將以你指定的顏色繪制文字。
字符串長度
你可以使用spriteFont查詢一個字符串實際占據的像素。這個信息對縮放和截取太長的字符串是很有用的。你可以同時獲取字符串的水平和豎直大小:
Vector2 stringSize=myFont.MeasureString(myString);重載方法
SpriteBatch.DrawString有一些重載方法可以可以接受與SpriteBatch.Draw方法相同的參數。解釋可見教程3-2。
spriteBatch.DrawString(myFont, secondString, new Vector2(50,100), Color.White,0,new Vector2(0,0),0.5f,SpriteEffet.None,0);StringBuilder
SpriteBatch.DrawString還可以使用一個StringBuilder對象代替string。如果你需要對字符串進行大量的修改應該使用StringBuilder對象,例如在一個循環中附加大量的字符串。首先在代碼頂部添加一個StringBuilder變量,這樣就無需每幀重新創建這個對象了:
StringBuilder stringBuilder =new StringBuilder();當你想使用這個方法時,首先將長度設為0清空StringBuilder。然后創建字符串,將它StringBuilder傳遞到SpriteBatch.DrawString方法中:
stringBuilder.Length=0; stringBuilder.Append("stringBuilder Example:"); for(int i=0;i<10;i++) stringBuilder.Append(i); spriteBatch.DrawString(myFont, stringBuilder, new Vector2(50,180), Color.White,0,new Vector2(0,0),0.5f,SpriteEffet.None,0);代碼
SpriteFont對象和SpriteBatch在LoadContent方法中進行初始化:
protected override void LoadContent() {device = graphics.GraphicsDevice; spriteBatch = new SpriteBatch(GraphicsDevice); myFont = Content.Load<SpriteFont>("ourFont"); }這兩個對象用來在Draw方法中繪制一些文字:
protected override void Draw(GameTime gameTime) {device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1, 0); spriteBatch.Begin(); string myString = "Elapsed seconds: " + gameTime.TotalGameTime.Seconds.ToString();spriteBatch.DrawString(myFont, myString, new Vector2(50, 20), Color.Tomato); spriteBatch.End(); base.Draw(gameTime); }轉載于:https://www.cnblogs.com/AlexCheng/archive/2010/11/23/2120154.html
總結
以上是生活随笔為你收集整理的处理2D图像和纹理——显示文字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无损联接分解
- 下一篇: flash player10.1 + F