XNA的中文支持

我也不知道有没有人之前

写的内容和我类似,但我可以保证我的是自己想出来的!而不是抄袭的!当然,事实上,其内容本身也没什么难度!

近日,我一直在研究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

,这是小弟的处女作,虽然,没有多高的技术水准但也算是劳动所得!另外,还请高人多多指教,多多指点!

图片为效果预览:

原文地址:https://www.cnblogs.com/SHGF/p/2125688.html