Mir*_*Mir 8 c# xna strong-typing xna-4.0
序言:
我正在使用XNA内容项目来保存我正在使用的所有各种纹理(以及可能的其他资源)作为开发游戏的一部分.
将图像从Content项目加载到XNA纹理对象的默认方法涉及使用硬编码字符串文字指向各种文件.
我想自动将内容项目中的目录/文件树投影到对象层次结构中,以避免直接使用字符串文字,并获得使用强类型对象的好处.
示例:
而不是使用
Texture2D tex = Content.Load("Textures/defaultTexture32");
我更喜欢
Texture2D tex = Content.Load(Content.Textures.defaultTexture32);
问题:
这个问题是否已有解决方案?(我在谷歌找不到任何东西)
额外的细节:
我相当肯定这可以通过T4模板完成; 可能与DTE工具一起使用.我已经初步尝试这样做了,但由于我对两种工具都缺乏经验,我一直在打块,但我过去曾与T4MVC合作过类似的事情.不幸的是,它投射的是类结构而不是文件系统,并且不易调整.
我不要求解决方案使用T4或DTE,它们看起来好像很可能是解决方案的一部分.
仅包含属于VS项目(而不是整个磁盘上文件系统)的文件将是更可取的,但不是必需的.
按文件类型等进行额外过滤的能力将是额外的特殊奖励.
对于那些没有立即看到这样做的好处的人; 考虑重命名或删除文件会发生什么.应用程序将继续编译正常,但它会在运行时崩溃.也许直到满足某个特定文件才能访问某个文件.如果将所有文件名都投影到一个对象结构中(每次构建项目时都会重新生成,或者甚至每次修改时都会重新生成),那么您将得到编译时错误,指出缺少的资源并可能避免很多未来痛.
谢谢你的时间.
小智 2
这是一个 T4 模板,它将读取项目目录中“Textures”文件夹中的所有文件。然后它们将作为字符串写入类中,如果您想限制文件搜索,只需更改 Directory.GetFiles() 即可。
添加/删除文件后,您可以在解决方案资源管理器中单击“转换所有模板”来生成新类。
希望这可以帮助!
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ import namespace="System.IO" #>
<# var files = Directory.GetFiles(Host.ResolvePath("Textures"), "*.*"); #>
namespace Content
{
class Textures
{
<# foreach (string fileName in files) { #>
public const string <#= Path.GetFileNameWithoutExtension(fileName) #> = @"Textures/<#= Path.GetFileNameWithoutExtension(fileName) #>";
<# } #>
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
384 次 |
最近记录: |