这是第二篇中用到的一张照片,里面描绘了整个过程:importer->processor->serializer->deserializer。上一篇中讨论了deserializer,这一节开始,逐步讨论其他部分。
先从importer开始:
namespace Microsoft.Xna.Framework.Content.Pipeline{
public abstract class ContentImporter<T> : IContentImporter{
public abstract T Import(string filename, ContentImporterContext context);
object Import(string filename, ContentImporterContext context){
return this.Import(filename, context);
}
}
}
该类是系统中所有导入器的父类,从代码中很容易看出只需要重写其Import方法即可,这里用到了模版设计模式。我们可以看看系统提供的一些导入器:
这些导入器是在
Microsoft.Xna.Framework.Content.Pipeline.dll外部,其代码非常复杂,而且设计到调用本地C++的库文件,而在当前dll中定义了两个比较简单的导入器:FontDescriptionImporter和XmlImporter。
namespace Microsoft.Xna.Framework.Content.Pipeline
{
[ContentImporter(".spritefont",
DisplayName="Sprite Font Description - XNA Framework",
DefaultProcessor="FontDescriptionProcessor")]
public class FontDescriptionImporter : ContentImporter<FontDescription>
{
public override FontDescription Import(string filename, ContentImporterContext context)
{
FontDescription description = null;
using (XmlReader reader = XmlReader.Create(filename))
{
description = IntermediateSerializer.Deserialize<FontDescription>(
reader, filename);
}
description.Identity = new ContentIdentity(
new FileInfo(filename).FullName, "FontDescriptionImporter");
return description;
}
}
}
[LocalizedContentImporter("XmlImporterDisplayName", ".xml")]
public class XmlImporter : ContentImporter<object>
{
public override object Import(
string filename, ContentImporterContext context)
{
using (XmlReader reader = XmlReader.Create(filename))
{
return IntermediateSerializer.Deserialize<object>(reader, filename);
}
}
}
}
下面讨论一下processor。
namespace Microsoft.Xna.Framework.Content.Pipeline{
public abstract class ContentProcessor<TInput, TOutput> : IContentProcessor{
object IContentProcessor.Process(object input, ContentProcessorContext context){
if (input == null){ throw new ArgumentNullException("input"); }
if (!(input is TInput)){ throw new }
TInput local = (TInput) input;
return this.Process(local, context);
}
public abstract TOutput Process(TInput input, ContentProcessorContext context);
}
}
采用了跟importer和typereader相同的设计思路。自定义的processor只需要重写Process方法即可。serializer也差不多,不想写了~~
- 大小: 3.4 KB
分享到:
相关推荐
XNA4.0学习指南--源代码
XNA学习资料-XNA入门指南2.0,比较适合新手哈
XNA Tutorial Collision Series 1 - 2D Rectangle Collision
基于XNA开发的3D游戏源码,适合初学者!
XNA学习资料,XNAXNA学习资料,XNAXNA学习资料,XNAXNA学习资料,XNA
xna4.0 中文 + 源码 这个xna教程很不错。源码也在里面。
《XNA4.0学习指南》书籍源码-1 ,由于上传限制,分了两部分上传的。这个是第一部分。
XNA学习指南_中文_附源代码[XNA学习必备] 菜鸟 高手 均可参考
一本没有翻译的英文书籍,关于XNA游戏框架开发
XNA2版的俄罗斯方块源码,visual studio2005环境测试
XNA实现Billboard示例源码
英文版下载地址:http://disanji.net/2011/02/13/ebook-learning-xna-4-0-game-development-for-the-pc-xbox-360-and-windows-phone-7/ 本书中彩色插图下载:http://u.115.com/file/f1a55ef495 本书源代码下载:...
cocos2d-x for xna 2D游戏引擎源码 xna cocos2d-x是一个用C#编写的2D游戏引擎,基于[cocos2d-x][1]和使用MIT 协议。 引擎由 [cocos2d-x][1] 和 [OpenXLive][2] 联合开发。 cocos2d-x for xna is a 2D game ...
xna Game studio 小游戏源码
xna_4.0 学习指南(xna learning)源码(全,45.9M)
XNA4.0指南源码 XNA4.0指南源码 XNA4.0指南源码XNA4.0指南源码XNA4.0指南源码
新手学习wp7 xna的简单例子,能够快速理解xna框架,实现了声音,动画,手势控制,开始画面等功能
这是一个xna的实例,如何用2d的方法实现爆炸效果
XNA4.0GameDevelopmentByExample-英文原版.zip
1.操作键说明: 数字键:1 - 创建PC ;2 - 创建敌人 ;3 - 创建树木 方向键:A、S、D、W 射 击:J