xlfdll 发表于 2011-7-31 16:35

[简单的技术分析]关于游戏无中文

本帖最后由 xlfdll 于 2011-7-31 18:34 编辑

我也来这里瞎扯两句

看到这里的朋友都在说这个游戏没有中文,再看游戏截图,我就有点怀疑这游戏是用XNA写的

结果下下来一看,Windows Installer的单MSI安装界面,并且需要XNA Framework 3.1,果然是用XNA做的!

装完之后:



Content目录,和相应的类库,确认是XNA无误

——————

XNA游戏默认支持的只有部分ASCII字符,以前写自己的XNA游戏的时候,为了让它支持中文,也是费了一番功夫
Correction: 于是楼下有人对我这句话产生误解了——这里的意思是指默认不支持中文字符直接显示,并不是不支持中文字体

Add: 如果你新建一个XNA 3.1的Windows游戏工程,默认情况下,Content文件夹里会有一个扩展名为.spritefont的文件,它指定了游戏所用的字符

这个东西是一个XML文件:



图中的CharacterRegions就用来划定游戏所使用的字符范围。可以看到Start和End是从32到126,这是属于ASCII码的字符,26个英文字母的大小写、数字和符号。下述的第一种方法就是改写此处,将数值扩大,从而包括全部汉字。
但是这样做会造成编译极度缓慢,因为编译器需要对每个范围内的字符都生成一个Font Sprite用来显示。
不要小看汉字只有几千到几万个,编译器需要生成符合各种缩放可能的字符显示,工作量会非常的大——我听说过有人用这个方法,一个游戏编译1个多小时的。

具体来说,如果想让它支持中文(或者其它默认不支持的字符集,比如日文),我所知道的有两个方法:
[*]改写配置,把支持字符的字符编码范围扩大——简单是简单,但是会造成编译时间超级长,汉字太多,需要一个一个进行处理(而且中文字符的范围不好确定,需要查阅Unicode标准)[*]重写一个叫做Font Description Processor的类,让它能够在处理ASCII字符的同时,从某个地方读入需要显示的汉字字符(比如我从文本文件读,这个文本包含了所有在游戏里要显示的汉字)。这个方法虽然比第一个复杂,但是效果不错,只处理要显示的字符,而不是全部汉字(具体参考:http://msdn.microsoft.com/en-us/library/bb447751(v=XNAGameStudio.31).aspx)


Correction: 类名叫做Font Description Processor,并不是说XNA自带的那个只支持英文字体。XNA支持的字符集是Unicode,但是默认情况下,它为了节省资源,将可显示字符的范围限制在ASCII当中了,所以我说它不能直接显示中文,需要将中文字符也进行处理才可以。

(我只是用XNA写小游戏玩的,估计其它高手应该有更好的方法……献丑了)

如果只是为了放Demo的话,使用英文可以省去这些步骤,毕竟Demo不是正式发布,只是用来演示的一个版本。它比较省时省事。

所以,虽然说起来感觉很搞笑,但是这个限制是XNA的,个人觉得程序员能做出来这东西已经让我服了……

P.S.
因为XNA游戏是.NET程序,所以用Reflector是可以反编译的……
当我反编译了一下之后,果然不出所料——代码被混淆了(混淆=把程序代码的所有名字打乱),不过还好只是部分混淆
支持中文字符的代码模式都是差不多的,如果只有繁体中文版的话,说不定是可以找出字符位置并直接改成简体的。

P.S.2
好吧,看起来好多人不是太了解XNA,我简单介绍一下好了

XNA实际上叫XNA Game Studio,是微软在.NET Framework上面搭建的一层游戏平台类库和与Visual Studio兼容的工具包。
出来的游戏需要安装运行库,即XNA Framework,版本与游戏开发时所用Game Studio的版本相同(这个游戏用的是3.1,开发平台估计是Visual Studio 2008)
(当然DirectX必不可少)

这个平台生产出来的游戏,原生支持Xbox 360手柄。并且只需要改动很小的一部分,就能在Windows,Xbox 360,Zune(微软的MP3播放器)和Windows Phone 7(需要Game Studio 4.0和Visual Studio 2010)之间移植。所以这游戏如果支持Xbox 360我不会感到意外。
(这一点有点像虚幻3引擎,Unreal 3)

.NET Framework本身使用的是Unicode(UTF-16)字符集,所以XNA理所当然是支持Unicode的。但是根据Unicode标准,支持并不等于就能显示,因为Unicode字符集只负责目标程序是否包含对这个字符的支持,而不管目标程序是如何将它渲染到屏幕上的。

因为使用的语言是C#和VB,用.NET Framework作为基础平台,如果是写.NET程序的程序员,写一个XNA游戏应该不算是什么难事。本身C#语言就挺好用。
(当然如果你是那种喜欢往底层调校的骨灰级游戏开发者,这个得单说了)
个人觉得,这个平台挺适合开发非性能攸关的游戏,比如类似Key社的CLANNAD那种言情类,或者是类似手机上的那些休闲小游戏。如果是开发大型FPS,我感觉它和Unreal 3比起来差太远了= =

现在微软把XNA平台的侧重点放在Windows Phone 7上面了,对于桌面PC的游戏开发貌似被淡化了不少。它使用的DirectX功能也仅仅是一个子集而不是全部。

P.S.3
对这游戏的个人看法:

两个字,加油!
我不怎么玩国产游戏的……但是作为一名程序员,我深知耍嘴皮子总是要比自己动手造东西要容易得多。
就像前两天我在某个Q群里提了一下我喜欢看名侦探柯南,立即就有觉得自己很能的人跳出来要对我争“柯南那个也算推理?!”……
(顺便在这里好好鄙视下……你(和谐)的又不是侦探也不是公安,你就知道什么是推理么?

上过学的都知道,老师经常会说一个词叫“眼高手低”。只有真正做过的人才会懂得这个词是什么意思。

还是那句话,自己造东西永远比你想象的要难得多。所以不管人家是炒作还是什么,人家总得要吃饭。
终归是花费了时间与成本出来的产品。

至于咱国为什么做不出像国外那样的大作什么的这类问题我就不胡扯了……

所以不管这游戏最后做得好不好,我都支持。

jpl134234987 发表于 2011-7-31 16:50

{:3_101:}{:3_101:}嗯嗯……

okheng 发表于 2011-7-31 16:50

{:3_190:}LZ技术流呀~

blasterking 发表于 2011-7-31 16:50

本帖最后由 blasterking 于 2011-7-31 16:52 编辑

别丢人了,XNA也是可以支持中文字体的,既然都有繁体了的。
还有,你肯定是XNA做的?

xlfdll 发表于 2011-7-31 16:52

别丢人了,XNA也是可以支持中文字体的,只是楼主不知道如何实现罢了。
blasterking 发表于 2011-7-31 16:50 http://bbs.3dmgame.com/images/common/back.gif


   
我不是给出实现方法了么……:L
而且我没说不支持中文字体,我只是说默认情况下不支持中文字符显示而已……

ibmzzjn 发表于 2011-7-31 16:53

技术帝。。。。虽然不懂,还是支持

shinesssss 发表于 2011-7-31 16:55

恩恩 的确是这样。。。

……
……
好吧,我没看懂

blasterking 发表于 2011-7-31 16:55

确实,我承认,如果要同时开发360和PC的游戏,XNA是个不错的选择。。。

xlfdll 发表于 2011-7-31 16:57

本帖最后由 xlfdll 于 2011-7-31 17:00 编辑

确实,我承认,如果要同时开发360和PC的游戏,XNA是个不错的选择。。。
blasterking 发表于 2011-7-31 16:55 http://bbs.3dmgame.com/images/common/back.gif


   
我倾向用Unreal 3……微软已经不对PC的XNA开发提供什么支持了- -

不知道有多少人说过一句名言:跟着微软走(合作)就是找倒霉的……

——另外,这个绝对是XNA做的,你用Reflector反编译一下主程序exe,看看using后面用的是什么就知道了
而且这游戏必须安装XNA Framework,加上目录结构那个“Content”(XNA保留目录,存放游戏材质等数据),我可以100%确定

其实我一开始知道这游戏是英文我就怀疑是XNA的了……繁体中文版是有,但是那得开发商自己写一个类上去才可以

blasterking 发表于 2011-7-31 17:02

本帖最后由 blasterking 于 2011-7-31 17:04 编辑

回复 10# xlfdll
但是微软一倒下,会有不少开发者不习惯,你也知道,微软的编译环境(确切的说是编译工具)很好用。

wanglida2010 发表于 2011-7-31 17:05

虽然不是很懂,还是顶下吧。

xlfdll 发表于 2011-7-31 17:12

回复xlfdll
但是微软一倒下,会有不少开发者不习惯,你也知道,微软的编译环境(确切的说是编译工具)很 ...
blasterking 发表于 2011-7-31 17:02 http://bbs.3dmgame.com/images/common/back.gif


XNA用的还是挺少的……我也很少见到有人用XNA做PC游戏……
编译环境这东西,如果真是要做性能攸关的游戏的开发者,他们肯定知道如何组合编译器
Visual Studio里面带的编译器实际上都是可以拆分出来的,比如:
[*].NET Framework: 自带的有C#和VB编译器[*]Windows SDK:自带C/C++编译器,当然包括.NET

所以不一定非得用Visual Studio。

反过来,Visual Studio的外壳是可以使用别的编译器的……

所以这不是什么大问题,至少XNA不是……

blea521ch 发表于 2011-7-31 17:41

我勒个去,技术贴

araleyo 发表于 2011-7-31 17:42

官方网站都说了是用xna开发的···

tanzheng 发表于 2011-7-31 17:55

去官网论坛看看就知道人家正式版有中文的

WAAAAAAGH 发表于 2011-7-31 17:57

不知道你在说啥 但是好像挺厉害

lkingstar 发表于 2011-7-31 17:58

xlfdll 发表于 2011-7-31 17:59

官方网站都说了是用xna开发的···
araleyo 发表于 2011-7-31 17:42 http://bbs.3dmgame.com/images/common/back.gif


   
我真不知道官方网站是什么……国产游戏从来不去看官方网站
只是一时兴起写点自己的东西而已……

araleyo 发表于 2011-7-31 18:01

我真不知道官方网站是什么……国产游戏从来不去看官方网站
只是一时兴起写点自己的东西而已…… ...
xlfdll 发表于 2011-7-31 17:59 http://bbs.3dmgame.com/images/common/back.gif


   你的确很厉害··,分析这些
而且这次没中文版应该不是你解释的这些
好像cj360版就是繁体中文的

ksantiago 发表于 2011-7-31 18:15

回复 10# xlfdll


    虽然我不懂编程,但是我知道,有些开发工具只支持英文asc,例如之前的gta:sa,因为单字节,无法汉化

当然最后还是成功汉化了

xlfdll 发表于 2011-7-31 18:22

你的确很厉害··,分析这些
而且这次没中文版应该不是你解释的这些
好像cj360版就是繁体中文的 ...
araleyo 发表于 2011-7-31 18:01 http://bbs.3dmgame.com/images/common/back.gif

我没说没有中文版一定就是因为这个,但是我自己开发过XNA游戏,所以我知道加中文比直接用英文费力气
这是一个Demo,基于商业考量的话也是有这个可能的……

不过我只是瞎扯点东西而已……因为这游戏是XNA写的让我觉得十分惊奇……

araleyo 发表于 2011-7-31 18:25

我没说没有中文版一定就是因为这个,但是我自己开发过XNA游戏,所以我知道加中文比直接用英文费力气
这是 ...
xlfdll 发表于 2011-7-31 18:22 http://bbs.3dmgame.com/images/common/back.gif


   我是说你真的很厉害··
那天在官网看到xna,我有点兴趣,就去搜了下
原来是用c#基于.net framework跨平台(主要指xbox360和pc)开发游戏的,提高代码重用率,便于移植····
以后用xna的应该比较多,当然仅指微软的机器··

a1425367898 发表于 2011-7-31 18:37

哦……
虽然不知道lz到底是想告诉我们什么,不过好像很厉害的样子,话说官方有说过了吧。

xlfdll 发表于 2011-7-31 18:42

我是说你真的很厉害··
那天在官网看到xna,我有点兴趣,就去搜了下
原来是用c#基于.net framework ...
araleyo 发表于 2011-7-31 18:25 http://bbs.3dmgame.com/images/common/back.gif


   
没事没事,别误会,哈哈……
我只是写东西尽量不要出错的习惯而已……见谅

XNA其实要写东西还是很好玩的……可惜微软把XNA的PC教程给撤了,刚才找了一圈都没找到

顺便说句……这游戏进去玩了,不错!比我想象的都要好……

a33366 发表于 2011-7-31 18:43

技术~~~~~~~~~~

shinjang 发表于 2011-7-31 18:47

看不懂的说{:3_99:}

dxl1236 发表于 2011-7-31 18:51

太专业了,技术帝!

a33366 发表于 2011-7-31 18:52

我是搞游戏的...我感觉搞程序的很无聊啊~~~~~~整体面对各种数字~烦死了~{:3_161:}

知杩 发表于 2011-7-31 19:27

LZ说的很好~中国游戏加油啊

araleyo 发表于 2011-7-31 19:30

我是搞游戏的...我感觉搞程序的很无聊啊~~~~~~整体面对各种数字~烦死了~ ...
a33366 发表于 2011-7-31 18:52 http://bbs.3dmgame.com/images/common/back.gif


   产品出来之后,消费者的夸奖,会让你很有成就感的
页: [1] 2
查看完整版本: [简单的技术分析]关于游戏无中文