windows phone 7开发日志(正题二,字体)
基于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();
补充:移动开发 , Windows Phone ,