以编程方式在XNA中加载字体,纹理和媒体

到目前为止,在我的节奏游戏中,我一直使用XNA的Content Pipeline来加载我的应用程序(video,音效等)中的静态资源。 不过,我希望能够让用户创建自己的主题,以及为他们想要播放的任何歌曲制作自定义音符。 有没有办法从磁盘加载说,一个Texture2D或Video对象,而不使用内容管道,给定一个文件path的资源?

编辑 :甚至认为这是XNA,我只针对Windows(没有Zune,WP7或Xbox 360)。

使用Texture2D.FromFile方法; 对于第一个参数,给它你的GraphicsDevice ,它是Game类的一个属性(所以从Game类的一个方法中,只使用this.GraphicsDevice )。

不幸的是,只有Texture2D对象可以这样加载; 一个Video对象不容易加载 。

使用MSBuild在运行时运行内容构建过程是完全可能的。 以下示例显示了基本如何执行此操作: http : //creators.xna.com/en-GB/sample/winforms_series2 。 这个特殊的例子使用Windows窗体,但是没有什么能够阻止你在实际的游戏中做同样的事情。

最大的问题是内容管道组件(这是所有处理器/导入器/构建任务所需的构建任务的地方)不包含在XNA Framework可再发行组件中。 这意味着为了实际创建和/或加载自定义内容,用户需要安装与您的游戏构建在一起的任何版本的XNA Game Studio。 他们永远不需要实际使用任何包含在其中的软件,但他们需要安装它。 根据您的游戏以及您希望创建和使用自定义内容的人员,这可能会也可能不会被接受。

一些内容处理器暴露了很多繁重的类,例如,接受一个Stream并生成一个中间对象(如构建网格所需的数据,而不是实际的Mesh对象)。 您可能可以执行一些额外的处理来将中间对象转换为您要使用的最终对象。 其中的一些课程甚至可能为你吐出最后的对象。 它因内容的types而异。 我建议通过内容处理器挖掘相关的内容types,看看有用的东西是暴露的。 您可能需要自己重写一些内容(Reflector是您的朋友),但是如果您不想使用“预编译”资源,则可能会付出努力。