日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

处理2D图像和纹理——显示文字

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处理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图像和纹理——显示文字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。