作者:clayman
僅供個人學習使用,請勿轉載,勿用於任何商業用途。
由於本人水平有限,難免出錯,不清楚的地方請大家以原著為準。歡迎大家和我多多交流。
Blog:http://blog.csdn.net/soilwork
clayman_joe@yahoo.com.cn
在XNA中繪製字型是一件很麻煩的事。由於XNA是跨平台的,而在Xbox 360中,並不存在系統字型,所以,目前的xna並不支援繪製字型。雖然我們仍然可以使用一些方法,在xna中調用GDI+來繪製字型,但這樣你的程式就失去了跨平台性,同時,調用GDI+也會影響繪圖的效率,因此,這不是一個推薦的方法。那應該如何來做呢? 目前較好的解決方案是使用位元影像字型(Bitmap Font)。所謂位元影像字型,其實就是預先把字型製作為一張位元影像,之後,就可以把位元影像當作字型來使用了。需要注意,由於字型已經製作為了位元影像,因此,大小是固定,所以應該根據需要,建立不同大小版本。當然,位元影像字型也提供了我們為遊戲建立獨一無二字型的能力。為了方便使用,通常把很多字型繪製到一張位元影像中,這就帶來了另一個問題: 如何從一張圖片中識別某個字元呢?很簡單,常見的位元影像字圖建立工具在建立位元影像的同時,還會建立一個xml檔案。在這個檔案中,記錄了每個字元在位元影像中的位置,大小,下面是某個xml檔案中,標示字母“A”的代碼:
<glyph ch="A" code="0041" bm="0" origin="95,27" size="15x27" aw="14" lsb="0" />
就像查字典一樣,通過這個xml檔案,我們就能定位所要的字元。(一張Bitmap Font) Bitmap Font Builder和Bitmap Font Generator都是建立位元影像字圖不錯的工具。特別是Bitmap Font Generator,會根據字型大小來排列字型,盡量減少位元影像尺寸。但這兩個工具都不能很好的支援Unicode,也就是說,如果需要建立中文,那麼可能會遇到一些問題。這裡推薦使用XNAExtras工具包。XNAExtras是XNA Diares提供的一系列助手程式和類。包含了BMFontGen,一個用於建立位元影像字型的,支援Unicode的小工具;BitmapFont,可以使用BMFontGen建立的位元影像字型,方便的繪製字型的類。此外,他還包含了一些Demo,和一些用於繪製sprite的工具。如果有時間,最好仔細研究一下BitmapFont的源碼,能讓你對使用位元影像字型有更加深入的認識。萬一覺得代碼太複雜,那麼不妨先看看 ziggyware 上另外一篇建立和繪製字型的教程。--------------------------------------------------------------------------------上古分割線------------------------------------------------------ 上一次提到把Game類的AllowUserResizing設定為true就能改變視窗大小。不知你發現沒有,縮放視窗時會出現一個bug,當前視窗會跑到案頭上所有視窗之下(如果你開了很多視窗)。解決方案是添加System.Windows.Forms;引用,接下來在程式初始化代碼中為this.Window.ClientSizeChanged事件添加一個eventhandler,然後在eventhandler中添加如下代碼:((System.Windows.Forms.Form)System.Windows.Forms.Form.FromHandle(Window.Handle)).BringToFront();ps:10月分的DirectX SDK中,將不再包含MDX 2.0,紀念一下~~~