欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

windows phone 7开发日志(正题二,字体)

程序员文章站 2022-08-17 16:03:51
基于xna的例子下了几个,不寒而栗。主要是代码看起来让人有种回到过去的感觉,那个刚会堆叠代码,为实现一点小功能欣喜若狂的过去。 说句托大的话,很多例子的编码方式,看起来就像是未经任何程序训练,学...

基于xna的例子下了几个,不寒而栗。主要是代码看起来让人有种回到过去的感觉,那个刚会堆叠代码,为实现一点小功能欣喜若狂的过去。

说句托大的话,很多例子的编码方式,看起来就像是未经任何程序训练,学会了凑几句语法,就在从事开发的初学者的处女作。结构和思路完全找不到清晰的脉络,代码复用和扩展性完全没有进入作者的大脑。这些看法仅代表个人意见,如果令人不快,请见谅。

如果这种水平代表了国内xna开发者的平均水准,那我们拥有着一个并不乐观的未来。我从来不认为xna和dotnet framework是一个玩具,打从微软在中国dotnet平台的那天起,我第一时间弄到了vs2003,时刻关注着它的发展。高级语言是趋势,是不可逆转的趋势,然而因为糊口或者种种原因,我一直没有成为一个专职的dotnet开发者。或许这种关注和自己并未投身其中的遗憾,让我面对国内dotnet 平台图形开发的囧境格外的敏感。

然而囧境还远不止于此。dotnet平台过去因为发行的不便造成很多应用不采用dotnet,在pc 平台因为面对原生c++和directx无力还击,在xbox live因为正规厂商用原生sdk开发并且零售,后娘养的xna始终无法占据主流。过去的一切悲痛随之逝去,留下一颗健壮的心,准备承受现在的悲痛。

xna3.1 登陆zunehd,成为唯一的图形接口。windows phone 7确定xna4为唯一的图形接口,xna4 with shader model3。好消息,因为唯一,可以远离语言之争,zune 和 windows phone,dotnet开发者所期待的舞台,微软终于把它带到这个市场上。我可以相信这一切只是开始,在操作上,归于应用也是一种趋势,对于底层的,原生的开发方式,将会越来越小众。对于微软,dotnet就是未来,之于图形,xna就是未来。之于微软死忠的我们,现在不正是前途明朗,应该投入其中的时候么?无论是为掘金还是为了兴趣。

xna4,你今天加入了嘛?

希望与失望总是形影不离,xna开发的群我加了几个,我也逛了几个。面对满篇没有营养的基础提问,面对对于zune和windows phone的漠视,面对用xna非要在pc上死磕的悲壮,我无奈,我失望。即使dotnet成为主流的那一天,站在舞台上的也决不会是这些浑浑噩噩的人。

xna4尚未正式发布,兄弟,你在哪里。我并非xna的义务推广者,在pc平台,我是一个专职的c++开发者。我对于xna没有特别的感情,只是因为windows phone 7,所以dotnet,所以xna。花了一个星期,前方竟然没有发现潜在的竞争者,这是何其无聊的局面。

志同者何在,掘金windows phone 7,一起出发吧。

xna4的游戏定位,微软的平台提供者身份,注定了xna是只有draw的设计,dx的弟弟。xna4 到 最终产品 中间所缺失环节是我着力关注的部分。我前行,我所取得的进展,对于后来者来说就是宝贵的财富。

这几天我得空的时候在搞场景管理,对于图形,没有最好,只有最合适。况且基础的部分已然扫平了技术障碍,但shader还不能在windows phone 7 上应用。又加上这几天我发现在xna上中文竟然一直没有一个优雅的解决方案。那些用gdi+解决的方案,我的评价只有两个字:脑残。被pc平台绑架的解决方案我的评价还是只有两个字:壮烈。对于花那么多精力做壮烈的事儿的人,就只能称为无聊了。

头上呆毛一颤,我看到一个商机。我开发一个优雅的truetype字体解决方案,大概花一两个月,按我自我的价值认知判断价值5w。等到后来者加入这个行列时,他投入5w搞开发应该可以实现和我同等的功能,如果他投入不足5w就能实现同等功能,我这些年程序就白当了。这些吹牛的话听听就算了,重要的是一个优雅的xna中文显示方案,绝对是有商业价值的。由于是由商业价值的计划,就恕我只放出库,就隐了^_^.

??? xna图形引擎计划变动,truetype显示方案,优先级提升到比地形更高。

另外还有输入方案,内嵌在游戏中的输入法,这个先挂起,这要看到时候windows phone7多国语言支持的情况了。手机上没有中文输入法还在中国卖,这样的笑柄是不可能发生的。关键是这个中文输入法,能不能再xna应用中呼出,这个可能性不大,横向对比其他手机平台,游戏中的输入还都是很尴尬的。

假设windows phone 7 还是无视xna应用中的输入法问题,我再开发一个xna输入法模块,这毫无疑问也有着直接的商业价值。

??? 扯了半天,字体没说一句,正题正题。

http://www.microsoft.com/typography/specificationsoverview.mspx

我的方案是直接载入ttf文件解析,在内存中动态生成字模。上面的链接是微软对ttf文件的格式说明,我昨夜搞到半夜,以simsunb.ttf为测试对象,将字体文件的基本数据读取分析完成了,剩下就是对于轮廓数据的解析和显示。就整个方案来说10%完成度。


使用方法如下,都是伪代码

clge_font font =new clge_font(“simsunb.ttf”);

最终输出方案我还没写,不过脑子里已经构造的很清楚了。

输出一,输出到模型,其实就是采用输出二来实现,将会提供源码


clge_font.makemesh(顶点格式,string 输入字符串,模型尺寸)

输出二,输出成路径。

路径就是点列表。


用户可以使用这些路径去做效果,那我就不管了。比如在每条路径上搞一个闪光特效,结合楼上的输出一,就可以实现有一个围着字的边缘放烟花的效果。用户可以使用路径创建模型,我提供一些从路径创建模型的示例,比如创建带导角,和空心字模型。

clge_font.makepathlist(string 输入字符串)

输出三,输出到贴图

clge_font.writetotexture(ushort 字符,int 字号,rect 目标输出区域)

输出四,直接绘制string

这个只是对输出三的封装,将会提供源码

showfont sfont = new showfont(clge_font 字体,int 字号,bool 采用动态缓存还是静态缓存)

//动态缓存就是只创建一张贴图,根据词频调整删除最早使用的。静态缓存在贴图放满字模时会再创建一张

spritebatch.begin();

sfont.draw(spritebatch,string 显示字符串,int x,int y);//提供采用spritebatch输出的实现,用户如果采用其他引擎做ui输出,对应修改源码即可。


spritebatch.end();