XNA的中文支援

來源:互聯網
上載者:User

我也不知道有沒有人之前

寫的內容和我類似,但我可以保證我的是自己想出來的!而不是抄襲的!當然,事實上,其內容本身也沒什麼難度!

 

近日,我一直在研究C#遊戲開發,想找很多MDX的相關資料,可沒想到MDX的資料實在是太少了!即使是有也都是英文的,我實在是看不懂啊!

(我英語確實不太好,就算能勉強看懂一些,也太吃力了!實在忍受不了了!)於是,另闢蹊徑......XNA這三個英文單詞又引入了我的眼帘,媽呀!

又是她,將近一年前的時候我就知道有這麼一個東西,但是因為當時實在覺得XNA也沒什麼強大的東東..於是我將它置於腦後,

而如今,哎!..........

         看來我不得不再看看了喲!

一看有中文的翻譯,太棒了!我高興得要命!於是我,興緻勃勃,可當我正熱火朝天的時候!問題來了!不支援中文的文字輸出(我的意思是說是顯示).................?

 

鬱悶,實在是太鬱悶了!!!!這著實是給我潑了一盆涼水啊!

想了一會兒,嗯GDI+中不時有DrawString()嗎,只是它是支援表單的!

能不能把它運用到XNA中呢?

經過約一兩個小時的嘗試得到代碼如下:(時間長了一點,因為本人是C#新手)

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Drawing2D;
using System.Drawing;
//using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
//using Microsoft.Xna.Framework.Graphics.PackedVector;
//using Microsoft.Xna.Framework.Design;
//using Microsoft.Xna.Framework.GamerServices;
//using Microsoft.Xna.Framework.Audio;
//using Microsoft.Xna.Framework.Content;
//using Microsoft.Xna.Framework.GamerServices;
//using Microsoft.Xna.Framework.Graphics.PackedVector;
//using Microsoft.Xna.Framework.Graphics;
//using Microsoft.Xna.Framework.Input;
//using Microsoft.Xna.Framework.Media;
//using Microsoft.Xna.Framework.Net;
//using Microsoft.Xna.Framework.Storage;

namespace MyChaneseSprintFont
{
    public class MyCHNSprintFont
    {
       
        public MyCHNSprintFont()
        {
           
        }

        /// <summary>
        /// 注意此方法適用於當遊戲初始化時使用,因為如果直接在XNA的draw方法裡頻繁使用將導致你的遊戲效能的下降,另外再提醒一下除了第一個參數外其她參數都是System.Drawing;或System.Drawing.Drawing2D;命名空間中的!
        /// </summary>
        /// <param name="graphics">擷取XNA的渲染(或者說是繪圖裝置)裝置,例如:graphics.GraphicsDevice</param>
        /// <param name="ShowStringOrFileName">擷取你要畫出的字串,例如:"我就是超級大笨蛋-----石高飛,SGF"</param>
        /// <param name="FontFamily">擷取你要或出的字串所要用到的字型,例如: "宋體"</param>
        /// <param name="FontSize">擷取你要畫出的字串的大小(這裡的大小就是指字型大小),例如:16f</param>
        /// <param name="MyFontStyle">擷取你要畫出的字串的樣式,例如:System.Drawing.FontStyle.Bold,System.Drawing.Color.Blue</param>
        /// <param name="MyFontColor">擷取你要畫出的字串的顏色,例如:</param>
        /// <param name="BitMapFormat">擷取你要畫出的字串所在圖面的位元影像結構,例如:System.Drawing.Imaging.PixelFormat.Format24bppRgb</param>
        /// <returns>注意:傳回值是Texture2D</returns>
        public static Texture2D NewString(Microsoft.Xna.Framework.Graphics.GraphicsDevice graphics, string ShowStringOrFileName, string FontFamily, float FontSize, System.Drawing.FontStyle MyFontStyle, System.Drawing.Color MyFontColor, System.Drawing.Imaging.PixelFormat BitMapFormat)
        {
            Font font;
            font = new Font(FontFamily, FontSize, MyFontStyle, GraphicsUnit.Pixel);
            float fx = (font.Size / 72) * 96;
            float fy = fx;
            int stringplxlength = (int)(ShowStringOrFileName.Trim().Length / 2 * fy + ShowStringOrFileName.Trim().Length * fx / 5);
            Bitmap bitmap = new Bitmap(stringplxlength+20, (int)(fx - fx / 5), BitMapFormat);
            System.Drawing.Color ColorKey = bitmap.GetPixel(1, 1);
            Graphics g = Graphics.FromImage(bitmap);
            SolidBrush sb = new SolidBrush(MyFontColor);
            g.DrawString(ShowStringOrFileName, font, sb, new PointF(0, 0));
            bitmap.MakeTransparent(ColorKey);
            string FileName = ShowStringOrFileName + ".png";
            bitmap.Save(FileName);
            Texture2D t2d = Texture2D.FromFile(graphics, FileName);
            return t2d;
        }
    }
}

 

我再次在聲明一遍!因為是GDI+技術所以建議盡量不要在Draw()函數中頻繁使用.否則,會導致你的遊戲的效能大大下降的!

在一些不必要的情況下最好是在遊戲加在的時候調用上面這個函數!產生Texture2D紋理,

因為有些要時時更新,於是我是在Draw()函數中插入了一個方法,檢測字串是否發生了變化!

所以我在Draw()函數中調用了,但我嚴格地限制了次數,以至於對遊戲本身而言不會有太多的效能上的下降!

到時可別怪我沒提醒你喲!

XNA本身是很強大很強大的作為MDX的繼承者,其效能比MDX的效能要好很多很多!

 

如有人轉載請註明出處http://blog.csdn.net/shigaofei1/archive/2010/04/05/5452619.aspx

,這是小弟的處女作,雖然,沒有多高的技術水準但也算是勞動所得!另外,還請高人多多指教,多多指點!

 

 

圖片為效果預覽:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.