前幾篇已經介紹,如何用XNA在程式中載入2D圖片。
在那邊當中用了SpriteBatch中的Draw函式,大家可以多多參考MSND,這個函式有很多Overloading格式,像是你可以決定呈現2D圖片的範圍等等。
現在就繼續接下來的範例,現在要在程式中繪製出文字,在一個遊戲中除了圖片美工外,最重要不外乎的是文字,文字呈現出故事內容以及對話,豐富遊戲的劇情。
在繪製想要輸出的文字之前,我們必須要先定義好Sprite Font檔案。
在Solution Expolorer中,對著專案按下右鍵,【Add】->【New Item】,選擇Sprite Font。
這個檔案用途主要是設定字型、大小、字元間距和字型形式等等。
建立好以後可以依照自己的喜好去修改
<FontName>新細明體</FontName> 選擇字體,決定所繪製的文字要用哪個已經被安裝的字體。
注意 : 部分字體有各自的版權,請確認有該字體的使用版權,否則可能會引起法律事件。
<Size>14</Size> 選擇字體大小。
<Spacing>2</Spacing> 選擇字元間距。
<Style>Regular</Style> 選擇字型型態,"Regular","Bold"粗體, "Italic"斜體,"Bold, Italic"粗斜體。
修改完畢以後存檔,這樣就可以開始繼續程式的編寫。
首先,增加三個元件,SpriteBatch、SpriteFont、Vector2D。
SpriteBatch spriteBatch;
SpriteFont spriteFont;
Vector2 pos;
SpriteBatch就是告訴設備目前要做的動作,像是準備繪畫等等,所以在建構的時候,可以想成他先跟設備先建立溝通,這種感覺,等等可以看看初始化的函數,這樣多少可以體會到。
SpriteFont : 呈現一個字型的紋理。
Vector2 : 一個2D的向量,這邊就當作他是一個座標,標示等等要把字畫在哪邊。
接下來,初始化SpriteBatch物件,在Initialize中,加入
spriteBatch = new SpriteBatch( graphics.GraphicsDevice );
建構子裡面所需要的參數就是GraphicsDevice,這邊讓我的感覺就像是我在跟圖形設備建立溝通。
在LoadGraphicsContent中的IF條件式裡,加入
spriteFont = content.Load<SpriteFont>("SpriteFont1");
把一開始我們最先建立好的SpriteFont交給Content去載入進來,這邊所載入後的回傳型態需要轉換成<SpriteFont>,在Load的參數中就是打入剛剛建立好的SpriteFont檔案名稱。
再來我做的事情就是指定位置,指定我畫出的文字要落在哪個地方,我把這行程式碼加在LoadGraphicsContent中,可是位置這個東西當然不只侷限在這邊,你可以在Draw的函數中,指定要繪製的位置,或是自己寫個函數讓他可以落在想要的位置。
pos = new Vector2(graphics.GraphicsDevice.Viewport.X, graphics.GraphicsDevice.Viewport.Y);
前置工作都準備完畢以後,接下來就是要將文字畫出來了,這邊我宣告一個字串物件text,用來指定要畫出的文字。
string text = "It's test by teexit!";
一樣的,我們必須要先告訴設備我準備要開始繪製了。
用spriteBatch.Begin()通知設備準備繪製。
使用SpriteBatch中的DrawString函數將字串畫出來
spriteBatch.DrawString(spriteFont, text, pos, Color.DarkBlue);
這個函式中有四個參數,第一個參數是需要傳入SpriteFont物件,第二個參數需要指定繪出的文字字串,第三個參數指定要輸出的位置,第四個參數指定文字的顏色,這個算是最基本的形式,只需要設定少數的參數,就可以繪製出字串。這個DrawString還提供比較進階的設定,像是旋轉、效果、深度等等。
繪製完成以後,就結束繪畫工作。
spriteBatch.End();
完成以上動作後,編譯執行看看,看看你想要畫出的文字是不是呈現出來了。
程式碼範例 :
下載
在那邊當中用了SpriteBatch中的Draw函式,大家可以多多參考MSND,這個函式有很多Overloading格式,像是你可以決定呈現2D圖片的範圍等等。
現在就繼續接下來的範例,現在要在程式中繪製出文字,在一個遊戲中除了圖片美工外,最重要不外乎的是文字,文字呈現出故事內容以及對話,豐富遊戲的劇情。
在繪製想要輸出的文字之前,我們必須要先定義好Sprite Font檔案。
在Solution Expolorer中,對著專案按下右鍵,【Add】->【New Item】,選擇Sprite Font。
這個檔案用途主要是設定字型、大小、字元間距和字型形式等等。
建立好以後可以依照自己的喜好去修改
<FontName>新細明體</FontName> 選擇字體,決定所繪製的文字要用哪個已經被安裝的字體。
注意 : 部分字體有各自的版權,請確認有該字體的使用版權,否則可能會引起法律事件。
<Size>14</Size> 選擇字體大小。
<Spacing>2</Spacing> 選擇字元間距。
<Style>Regular</Style> 選擇字型型態,"Regular","Bold"粗體, "Italic"斜體,"Bold, Italic"粗斜體。
修改完畢以後存檔,這樣就可以開始繼續程式的編寫。
首先,增加三個元件,SpriteBatch、SpriteFont、Vector2D。
SpriteBatch spriteBatch;
SpriteFont spriteFont;
Vector2 pos;
SpriteBatch就是告訴設備目前要做的動作,像是準備繪畫等等,所以在建構的時候,可以想成他先跟設備先建立溝通,這種感覺,等等可以看看初始化的函數,這樣多少可以體會到。
SpriteFont : 呈現一個字型的紋理。
Vector2 : 一個2D的向量,這邊就當作他是一個座標,標示等等要把字畫在哪邊。
接下來,初始化SpriteBatch物件,在Initialize中,加入
spriteBatch = new SpriteBatch( graphics.GraphicsDevice );
建構子裡面所需要的參數就是GraphicsDevice,這邊讓我的感覺就像是我在跟圖形設備建立溝通。
在LoadGraphicsContent中的IF條件式裡,加入
spriteFont = content.Load<SpriteFont>("SpriteFont1");
把一開始我們最先建立好的SpriteFont交給Content去載入進來,這邊所載入後的回傳型態需要轉換成<SpriteFont>,在Load的參數中就是打入剛剛建立好的SpriteFont檔案名稱。
再來我做的事情就是指定位置,指定我畫出的文字要落在哪個地方,我把這行程式碼加在LoadGraphicsContent中,可是位置這個東西當然不只侷限在這邊,你可以在Draw的函數中,指定要繪製的位置,或是自己寫個函數讓他可以落在想要的位置。
pos = new Vector2(graphics.GraphicsDevice.Viewport.X, graphics.GraphicsDevice.Viewport.Y);
前置工作都準備完畢以後,接下來就是要將文字畫出來了,這邊我宣告一個字串物件text,用來指定要畫出的文字。
string text = "It's test by teexit!";
一樣的,我們必須要先告訴設備我準備要開始繪製了。
用spriteBatch.Begin()通知設備準備繪製。
使用SpriteBatch中的DrawString函數將字串畫出來
spriteBatch.DrawString(spriteFont, text, pos, Color.DarkBlue);
這個函式中有四個參數,第一個參數是需要傳入SpriteFont物件,第二個參數需要指定繪出的文字字串,第三個參數指定要輸出的位置,第四個參數指定文字的顏色,這個算是最基本的形式,只需要設定少數的參數,就可以繪製出字串。這個DrawString還提供比較進階的設定,像是旋轉、效果、深度等等。
繪製完成以後,就結束繪畫工作。
spriteBatch.End();
完成以上動作後,編譯執行看看,看看你想要畫出的文字是不是呈現出來了。
程式碼範例 :
下載
文章標籤
全站熱搜

嗯~~看樣子這果然不能顯示中文字阿~~呵呵 不過其實我比較好奇的是當要傳到360時 這樣怎麼辦 這樣這方法應該就不行了吧 應該不會是把每個要用到的字都存成圖片這招吧= =|||好像蠻累人的
那個做法只能在PC上面,除非XBOX360有提供GDI+... 如果你說的是圖片的方法的話... 這的確很累,同時遊戲會變得很大... 我是不太建議,可是要讓XNA支援中文,這個是天方夜譚...英文26個字就解決了= = 中文有多少個@@? 所以這是不可能的
所以要傳到360上執行 就一定要圖片的方式顯示英文字囉 還是其實他還是有內建的函數可以使用呢?
如果你剛剛有看到甚麼的話,是錯覺 囧(因為PIXNET一直不給我貼文章) 如果你要用spriteBatch.DrawString這個函數去做的話,只能夠用英文字 XNA不支援任何除了英文以外的語言
我在巴哈看到有人說XBOX360 裡面已經內建BIG5碼 可以直接拿來用 這是真的嗎?
他回答的是XNA? 因為你用中文的話,光在編譯就會發生問題了... 不信你可以用看看XD
http://forum.gamer.com.tw/C.php?page=1&bsn=60282&snA=45531&read=&tnum=105&locked=F&subbsn=0&Bpage=1 他只留了這篇~也沒再回復了
在第七篇的那個文章你看看 也許就是用那種方法做到的,而實際上XBOX360還是沒有支援中文