`
andyjackson
  • 浏览: 58576 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

XNA学习笔记7-源码分析(续)

阅读更多
这是第二篇中用到的一张照片,里面描绘了整个过程: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学习指南--源代码

    通过这个“XNA4.0学习指南--源代码”压缩包,学习者可以研究和分析各种示例代码,了解如何应用上述技术来构建实际游戏。实践中,你可以学习如何加载资源、处理用户输入、创建游戏循环、实现基本的物理系统,以及如何...

    XNA Collision Series 1 - 2D Rectangle Collision

    XNA Tutorial Collision Series 1 - 2D Rectangle Collision

    XNA游戏开发->国际象棋源码

    7. **资源管理**:学习如何加载、释放音频、图像和模型等资源,避免内存泄漏。 8. **AI算法**:虽然描述中没有特别提到AI,但如果是3D国际象棋游戏,很可能包含简单的AI对战模式。这可能涉及到基础的搜索算法,如...

    XNA学习资料,XNA

    7. **声音和音乐处理**:介绍如何使用XNA的SoundEffect和Music类来播放音频文件,包括音效和背景音乐的管理。 8. **时间管理**:讲述Update和Draw方法,以及如何根据游戏帧率进行时间同步,确保游戏行为的一致性。 ...

    XNA学习资料-XNA入门指南2.0

    以下将详细介绍XNA学习中的关键知识点: 1. **游戏循环**:在XNA中,游戏运行基于一个核心的游戏循环,包括初始化、更新、绘制等步骤。开发者需要理解这些阶段的作用,例如更新逻辑、处理输入和渲染画面。 2. **...

    XNA2版俄罗斯方块源码

    通过对XNA 2.0版俄罗斯方块源码的分析,我们不仅可以掌握这个游戏的实现细节,还能学习到游戏开发的基本原理和XNA框架的使用。虽然XNA已经不再得到官方支持,但它的设计理念和许多技术仍对现代游戏开发有所启发,是...

    XNA入门指南-第一章

    #### 三、学习XNA所需技能 - **C#编程基础**:虽然本书不是编程入门书籍,但对于C#有一定的了解是非常必要的。C#是XNA开发的主要语言,熟悉C#语法和编程技巧对于理解XNA框架至关重要。 - **数学基础知识**:游戏...

    《XNA4.0学习指南》书籍源码

    通过分析和运行这些源码,读者不仅可以了解XNA的基本用法,还能掌握游戏开发中的常用技巧和最佳实践。对于初学者,这是一次宝贵的学习机会,能够帮助他们快速上手并理解游戏开发的核心概念。对于有一定经验的开发者...

    wp7 xna 投石车大战源码

    总的来说,"wp7 xna 投石车大战源码"是一个很好的学习资源,它不仅提供了实际的编程实践,而且覆盖了游戏开发中的多个关键概念,对于希望进入游戏开发领域的初学者来说,是非常有价值的。通过对这个游戏的代码进行...

    XNA学习指南_中文_附源代码[XNA学习必备]

    **XNA学习指南详解** XNA,全称为Xbox Next Generation APIs,是由微软推出的一款用于游戏开发的框架,特别适合初学者和有经验的游戏开发者。它提供了完整的工具集,包括编程环境、图形库和音频处理功能,使得创建...

    xna4.0 中文 + 源码

    提供的压缩包文件包括一本名为《XNA4.0学习指南》的PDF教程,可能涵盖了上述各个知识点的详细讲解,以及一个名为`LearningXNA4.0.rar`的源码包,这将帮助读者通过实践深入理解XNA4.0的开发过程。阅读这些资源,...

    xna3.0的一个源码

    【XNA 3.0 源码解析】 ...通过分析和学习XTank的源码,我们可以掌握XNA 3.0的基本使用,包括游戏对象的管理、用户输入处理、2D图形绘制、音效集成以及可能的简单网络通信。这将为后续更复杂的游戏开发打下坚实基础。

    XNA实现Billboard示例源码

    通过分析和理解这个BillboardSample源码,开发者可以学习到如何在XNA框架中有效地实现面向摄像机的2D图像,这对于游戏开发和3D可视化应用都是一个非常实用的技术。此外,这个示例也可以作为进一步学习XNA图形编程、...

    xna_4.0 学习指南(xna learning)源码(全,45.9M)

    《XNA 4.0 学习指南》源码是一份详尽的教育资源,专为开发者提供关于微软XNA框架的深入理解与实践操作。XNA是Microsoft开发的一个游戏开发平台,它简化了游戏在Windows、Xbox 360和Zune等设备上的创建过程。这份源码...

    xna 爆炸效果 源码

    在游戏开发领域,XNA框架是一个非常受欢迎的工具,它为开发者提供了构建Windows、Xbox 360以及Zune平台游戏的能力。本资源聚焦于一个特定的技术点——使用XNA实现2D爆炸效果。2D爆炸效果在很多游戏场景中都非常常见...

    cocos2d-x for xna 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是两个在游戏开发领域至关重要的...通过深入研究这些源码,开发者不仅可以学习到Direct 3D和XNA的具体用法,还能掌握游戏开发的通用实践和技术。这将对想要从事游戏开发的程序员来说是一笔宝贵的财富。

    xna Game studio 小游戏源码

    通过阅读和分析这些源码,我们可以深入理解如何在XNA中实现这些功能。 1. 游戏循环:每个游戏都有一个主循环,通常包括Update和Draw两个阶段。Update负责处理游戏逻辑,如物体移动、碰撞检测;Draw则负责渲染游戏...

Global site tag (gtag.js) - Google Analytics