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

相关文章

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

中文分词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服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑