silverlight游戏设计(二)资源管理篇(补充)--图片帧序列资源包解析与图片资源处理
时间:2010-12-26 来源:姜 萌@cnblogs
StreamResourceInfo
一个mmorp 游戏的资源是非常多且杂的。比如单说玩家职业就可能有5、6种,每种又分性别,对于一个精灵而言,至少要准备是5个方向的帧序列动画图片(比如上,下,左,左上,左下。对于右边,右上和右下用前几种直接翻转即可),而动作上还能细分出站立、跑、战斗、死亡……。所以我们需要对资源进行归并、打包。这样不仅便于项目文件管理,而且还能减少文件尺寸(不过对图片并不明显)。
System. Windows.Resources这个命名空间提供了对silverlight资源进行处理的类型。里面有个StreamResourceInfo类,ok,这就是我们用来处理资源的利器。
StreamResourceInfo能够解析的是一个zip文件(xap其实就是zip,所以同样能解析xap),通过GameImageResService抓起目标资源包,得到一个stream,就可以构造StreamResourceInfo对象,进一步对于资源包里的文件我们都可以通过其URI得到相应的流对象,比如下:
StreamResourceInfo info = new StreamResourceInfo(stream, null);
using (var reader = new StreamReader(Application.GetResourceStream(info, new Uri(IMG_ZIP_XML, UriKind.Relative)).Stream))
{
……
图片帧序列资源包以及图片包配置文件
StreamResourceInfo是我们解析资源包的基础,接下来定义动画图片资源包的结构:
图片文件名既是帧序号,resconfig.xml的文件中定义每一个图片的中心点偏移等信息。
silverlight中解析xml
.net中解析xml的方式有很多,不仅提供了流式和DOM解析的api,还有linq2xml。固然后两种方式解析xml最为简单方便,但是需要添加额外的程序集引用(System.Xml.Linq.dll是100+KB),使整个项目大了不少,对于身材本来就瘦小webgame来讲已经很大了,所以我们还是选取流式读取(当然具体情况要结合您自身的项目)
code
一些有用的技巧
切割图片
得到一个图片进行角度旋转后的副本
得到一个图片进行水平翻转后的副本