Home > 未分类 > XNA资源预生成与手动加载

XNA资源预生成与手动加载

 
XNA资源管线中同大多数人加载游戏资源的方法有一个重要的差异:在资源管线中,游戏不再直接从不同格式的资源文件如.x,.BMP,.fx直接读取。相反,我们编译游戏代码的同时就将各种资源文件编译成特定的二进制格式。
这种生成期处理资源的做法对于任何有过控制台游戏开发经验的人来说都是很熟悉的,但是Windows背景的同志们可能会感到惊讶。这样做的好处主要有:
1.Windows具有丰富的编程环境,许多工具软件和库,可以方便地加载和转换资源文件。而大多数这些库在XBOX上都是没有的,因此使用它们的唯一的办法是在Windows系统上预先处理好。
2.游戏控制台具有相对小的内存,并且没有虚拟内存。资源处理往往需要大量的临时内存消耗,因此最好先在Windows系统上建立好。
3.将游戏资源转换到用于渲染的资源的过程可能需要很长的时间,如果我们在加载资源时做这样的转换,将使得每个玩家的游戏加载速度变慢。通过将处理操作转移到生成时,只需要开发人员一次性处理,每个玩家都可以很快地加载这些资源。
4.通过生成时处理资源,我们可以丢弃任何游戏中实际不需要的数据。因此可以最小化发布包。
5.提前处理意味着提前发现错误,可以尽量减少运行时加载资源发生的故障。
然而,如果你确实需要在XNAGameStudio之外自己来转换格式该怎么办呢?比如你需要在关卡设计器中使用XNA资源管线,或者需要加载用户自定义资源时?
你的运气不错,因为所有的资源管线生成功能都被暴露为一个MSBuild任务。这里我就不详细介绍MSBuild了(详情请询问MSDN,或者Google)。只需要知道,MSBuild运行通过XML工程文件描述的任务。
实际上,你加载到GameStudioExpress中的.csproj文件就是一种MSBuild工程。
因此,为了手动生成资源,你只需要创建一个调用资源管线的MSBuild工程文件,运行MSBuild创建出.xnb,然后加载这个文件。
这里有个MSBuild工程文件的例子,它使用资源管线加载一个文件MyTexture.tga:
 
  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;
    <UsingTask TaskName="BuildContent" AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" />
    <PropertyGroup>
      <XnaInstall>C:Program FilesMicrosoft XNAXNA Game Studio Expressv1.0ReferencesWindowsx86</XnaInstall>
    </PropertyGroup>
    <ItemGroup>
      <PipelineAssembly Include="$(XnaInstall)Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll" />
    </ItemGroup>
    <ItemGroup>
      <Content Include="MyTexture.tga">
        <Importer>TextureImporter</Importer>
        <Processor>SpriteTextureProcessor</Processor>
      </Content>
    </ItemGroup>
    <Target Name="Build">
      <BuildContent SourceAssets="@(Content)" PipelineAssemblies="@(PipelineAssembly)" TargetPlatform="Windows" />
    </Target>
  </Project>

这段XML保存成test.proj文件,就可以通过命令行调用"msbuild test.proj"来运行它。

 
—————————————————河蟹的分割线—————————————————–
 
[本文介绍了XNA资源预生成的理由,以及自定义资源生成的解决方案]
[XX词:XNA, content pipeline, MSBuild, .xnb]
[本人翻译此文不表示同意其中任何经济文化娱乐观点,谢绝任意形式的跨省市自治区县乡村网段楼层进程追捕]
Advertisements
Categories: 未分类
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: