XNA的中文支持

2023-12-03 22:38
文章标签 中文 支持 xna

本文主要是介绍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

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

 

 

图片为效果预览:

这篇关于XNA的中文支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/451131

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

彻底解决win10系统Tomcat10控制台输出中文乱码

彻底解决Tomcat10控制台输出中文乱码 首先乱码问题的原因通俗的讲就是读的编码格式和写的解码格式不一致,比如最常见的两种中文编码UTF-8和GBK,UTF-8一个汉字占三个字节,GBK一个汉字占两个字节,所以当编码与解码格式不一致时,输出端当然无法识别这是啥,所以只能以乱码代替。 值得一提的是GBK不是国家标准编码,常用的国标有两,一个是GB2312,一个是GB18030 GB1

QtC++截图支持窗口获取

介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口 1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.