这是第二篇中用到的一张照片,里面描绘了整个过程: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 Tutorial Collision Series 1 - 2D Rectangle Collision
7. **资源管理**:学习如何加载、释放音频、图像和模型等资源,避免内存泄漏。 8. **AI算法**:虽然描述中没有特别提到AI,但如果是3D国际象棋游戏,很可能包含简单的AI对战模式。这可能涉及到基础的搜索算法,如...
7. **声音和音乐处理**:介绍如何使用XNA的SoundEffect和Music类来播放音频文件,包括音效和背景音乐的管理。 8. **时间管理**:讲述Update和Draw方法,以及如何根据游戏帧率进行时间同步,确保游戏行为的一致性。 ...
以下将详细介绍XNA学习中的关键知识点: 1. **游戏循环**:在XNA中,游戏运行基于一个核心的游戏循环,包括初始化、更新、绘制等步骤。开发者需要理解这些阶段的作用,例如更新逻辑、处理输入和渲染画面。 2. **...
通过对XNA 2.0版俄罗斯方块源码的分析,我们不仅可以掌握这个游戏的实现细节,还能学习到游戏开发的基本原理和XNA框架的使用。虽然XNA已经不再得到官方支持,但它的设计理念和许多技术仍对现代游戏开发有所启发,是...
#### 三、学习XNA所需技能 - **C#编程基础**:虽然本书不是编程入门书籍,但对于C#有一定的了解是非常必要的。C#是XNA开发的主要语言,熟悉C#语法和编程技巧对于理解XNA框架至关重要。 - **数学基础知识**:游戏...
通过分析和运行这些源码,读者不仅可以了解XNA的基本用法,还能掌握游戏开发中的常用技巧和最佳实践。对于初学者,这是一次宝贵的学习机会,能够帮助他们快速上手并理解游戏开发的核心概念。对于有一定经验的开发者...
总的来说,"wp7 xna 投石车大战源码"是一个很好的学习资源,它不仅提供了实际的编程实践,而且覆盖了游戏开发中的多个关键概念,对于希望进入游戏开发领域的初学者来说,是非常有价值的。通过对这个游戏的代码进行...
**XNA学习指南详解** XNA,全称为Xbox Next Generation APIs,是由微软推出的一款用于游戏开发的框架,特别适合初学者和有经验的游戏开发者。它提供了完整的工具集,包括编程环境、图形库和音频处理功能,使得创建...
提供的压缩包文件包括一本名为《XNA4.0学习指南》的PDF教程,可能涵盖了上述各个知识点的详细讲解,以及一个名为`LearningXNA4.0.rar`的源码包,这将帮助读者通过实践深入理解XNA4.0的开发过程。阅读这些资源,...
【XNA 3.0 源码解析】 ...通过分析和学习XTank的源码,我们可以掌握XNA 3.0的基本使用,包括游戏对象的管理、用户输入处理、2D图形绘制、音效集成以及可能的简单网络通信。这将为后续更复杂的游戏开发打下坚实基础。
通过分析和理解这个BillboardSample源码,开发者可以学习到如何在XNA框架中有效地实现面向摄像机的2D图像,这对于游戏开发和3D可视化应用都是一个非常实用的技术。此外,这个示例也可以作为进一步学习XNA图形编程、...
《XNA 4.0 学习指南》源码是一份详尽的教育资源,专为开发者提供关于微软XNA框架的深入理解与实践操作。XNA是Microsoft开发的一个游戏开发平台,它简化了游戏在Windows、Xbox 360和Zune等设备上的创建过程。这份源码...
在游戏开发领域,XNA框架是一个非常受欢迎的工具,它为开发者提供了构建Windows、Xbox 360以及Zune平台游戏的能力。本资源聚焦于一个特定的技术点——使用XNA实现2D爆炸效果。2D爆炸效果在很多游戏场景中都非常常见...
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 ...
Direct 3D与XNA是两个在游戏开发领域至关重要的...通过深入研究这些源码,开发者不仅可以学习到Direct 3D和XNA的具体用法,还能掌握游戏开发的通用实践和技术。这将对想要从事游戏开发的程序员来说是一笔宝贵的财富。
通过阅读和分析这些源码,我们可以深入理解如何在XNA中实现这些功能。 1. 游戏循环:每个游戏都有一个主循环,通常包括Update和Draw两个阶段。Update负责处理游戏逻辑,如物体移动、碰撞检测;Draw则负责渲染游戏...