• 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

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

    图片为效果预览:

  • 相关阅读:
    redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)
    分库分表基本概念
    产品经理黑话
    在linux虚拟机中安装部署MySQL数据库
    计算机专业本科自考
    在项目中重新搭建一套读写分离+高可用+多master的redis cluster集群
    扔掉工具类,Mybatis一个简单配置搞定数据加密解密!
    两台Linux系统之间传输文件使用scp的解决方案
    博客园积分排名前3000名
    内网穿透在家远程连接公司电脑<强烈收藏,早晚用得上>
  • 原文地址:https://www.cnblogs.com/SHGF/p/2125688.html
Copyright © 2020-2023  润新知