zoukankan      html  css  js  c++  java
  • 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

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

    图片为效果预览:

  • 相关阅读:
    VScode 修改中文字体
    missing KW_END at ')' near '<EOF>'
    SQL inner join, join, left join, right join, full outer join
    SQL字符替换函数translater, replace
    SQL COOKBOOK SQL经典实例代码 笔记第一章代码
    sqlcook sql经典实例 emp dept 创建语句
    dateutil 2.5.0 is the minimum required version python
    安装postgresql后找不到服务 postgresql service
    Postgres psql: 致命错误: 角色 "postgres" 不存在
    【西北师大-2108Java】第十六次作业成绩汇总
  • 原文地址:https://www.cnblogs.com/SHGF/p/2125688.html
Copyright © 2011-2022 走看看