问题标签 [content-pipeline]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xml - XNA 使用 content.load XML 总是返回相同的对象?
我正在尝试将 xml 文件用于 spritesheet 数据;我有一个框架类,它要么包含一个矩形,要么包含另一个框架列表(它可以是一个框架本身,也可以是更多框架的持有者)。xml 包含框架的所有矩形。我已将 xml 添加到内容项目并使用 Content.load("xmlname") 加载它。
使用一次时,这一切都很好。但是,当我创建 2 个共享相同 spritesheet 的对象(以及因此相同的 xml 数据文件)时,当这 2 个对象位于同一帧上时,它们就会消失。经过一番挫折后,我发现 xml 文件总是返回相同的对象,因此共享帧,因此它一次只能绘制一个位置的帧。
这是 xml 文件的一小部分:
类的精简版:
示例用法:
我试图手动反序列化 xml,但反序列化列表是一场噩梦。我在这里做错了吗?看起来很奇怪,它返回相同的对象
visual-studio - 在编译前设置 CultureInfo 并在编译后始终重置
我正在尝试执行一项任务,该任务更改 XNA 内容管道项目在编译时使用的语言环境/文化,并在编译结束后恢复原始文件。目的是允许在非英语机器中正确解析浮点数。
到目前为止,我正在使用 BeforeBuild 和 AfterBuild,如下所示:
它可以正常工作,除非在编译期间发生错误(无效的 XML 或 ContentSerializer 错误),之后不会重置语言环境。SO中的答案是矛盾的,因为有人说AfterBuild总是执行(不是我的情况),而其他人说没有办法确保目标总是在构建后运行。我还没有在谷歌周围找到关于这个的确切信息。
我知道可以选择使用PostBuildEvent
并将其设置为始终运行,但它会用于Exec
运行命令,我怀疑它会在单独的线程中运行,从而违背了它的目的(我设置CurrentThread.CultureInfo
为更改语言环境)。
那么,有没有办法确保目标始终运行?或者,有没有其他方法可以告诉 VS2010 运行具有特定文化的编译?
非常感谢明确澄清该问题的文档链接。
--最终解决方案,按照 Seva 的回答 --
XNA 的内容管道不声明PreBuildEvent
也不PostBuildEvent
. 其他必需的属性(RunPostBuildEvent
和PreBuildEventDependsOn
)PostBuildEventDependsOn
也没有定义。但是,如果您定义它们,内容管道将像在任何其他项目中一样充分利用它们。
因此,我必须对 contentcsproj 文件进行的更改是:
使用此解决方案可以间接解决另一个问题,即如果另一个项目重新定义 BeforeBuild 或 AfterBuild 时可能出现的潜在问题,从而导致其中一个定义覆盖另一个定义。
xna - 在 Xbox 游戏项目中通过内容管道编写
我正在创建一个 Xbox 应用程序,但内容管道存在这个问题。加载 .xnb 文件不是问题,但我似乎找不到任何关于通过内容管道进行写作的有用教程。每当用户按下定制的“保存”按钮时,我都想编写一个 XML。我已经在网上搜索“保存游戏状态”等,但到目前为止我还没有找到适合我的情况的解决方案。
所以,总结一下:如果我的 Save() 方法被调用,有没有办法通过内容管道写入数据(以 XML 格式)?
欢呼
c++ - 在 Visual Studio 中组织内容管道
(这与 XNA 内容管道无关)
我正在尝试使用 Visual Studio 实现内容管道,即:
- 项目 A 生成文件 a
- 项目 B 产生文件 b
- a 和 b 被传递到外部压缩工具,该工具生成输出文件 a' 和 b'
- a'、b' 和一些额外的元信息被传递给项目 C 并将其合并到文件 c 中
- c最终传递给实际的项目D
从 A/B 到 D 的整个过程大约需要 10 到 20 分钟。自然,我希望尽可能少地执行此操作,以便能够在没有太多停机时间的情况下继续处理任何这些项目。管道还应该易于扩展。
照原样,整个管道是使用 VS10 Makefile 项目中的各种命令行调用来执行的。因此,每次我构建解决方案时,管道都会运行,即使内容文件或项目根本没有改变。
显然这不是最聪明的方法,那么解决此类问题的通常方法是什么?自定义构建步骤?批处理文件?
xna - Linking Content Project (XNA) to a non XNA project
Can I reference a Content Project to a Non-XNA project (MonoGame, if it's important)?
msbuild - 当项目设置为“无”时,动态构建内容项目不会复制
所以我正在构建一个工具,它可以即时创建一个 ContentProject 然后构建它(以便它输出 Xnb) 目前的问题是,如果用CopyToOutputDirectory = 'always' 或 'PreserveNewest'。如果我们在 .contentProj 中查看不应该构建但应该复制的文件的该部分,则看起来像这样
但是,我正在即时构建内容项目,因此我需要以下代码来创建项目并添加项目
最后是构建代码
在 BuildRequest 中,空数组接受作为目标的参数......我已经经历了许多不同的目标,它们做不同的事情,从构建但没有真正输出文件到将依赖 dll 复制到主文件夹但不是我需要的
干杯
c# - XNA 的自动 XNB 序列化支持哪些类型?
我已经阅读了 Shawn Harvgreave 的关于自动序列化的博客文章和关于内容管道概述的 MSDN 文章,但我找不到支持的类型列表。
引用 MSDN:
从 XNA Game Studio 3.1 开始,对于没有现有内容类型编写器的简单类型,将自动将自定义数据序列化为 .XNB 格式。
Queue
在我尝试使用System.Collections.Generic
我猜自动序列化不支持的a 之前,我没有遇到过这个问题。
那么,是否有此支持的类型列表?如果不支持,我是否需要编写自己的ContentTypeWriter
and ContentTypeReader
?
c# - XNA - 如何在安装时默认将 settings.ini 添加到游戏中?
我有一个 settings.ini 文件,我想在安装时将其包含在游戏中。它应该在一个名为 Settings 的文件夹中,并且应该与游戏的其余部分位于同一目录中(如可执行文件和默认内容文件夹)。
我想我会在我的游戏解决方案中添加一个额外的空内容项目并将 settings.ini 文件添加到其中。
你猜怎么着!它不起作用。
它给了我以下错误:
错误 6 无法自动检测要用于“Settings.ini”的导入程序。没有处理这种文件类型的进口商。在您的项目中指定处理此文件类型的导入器。PATH_TO_GAME\Settings\Settings.ini
我用谷歌搜索了一下,但看起来我需要编写自己的内容管道。
有没有更好/更简单的方法来做到这一点?我不想把时间浪费在写这个非常困难的部分上。
PS。如果我安装游戏并将 settings.ini 添加到设置目录,我可以写入和读取 settings.ini 文件。但是现在我必须手动添加 settings.ini 文件,这是我不想要的。我希望它在您安装时随游戏一起提供。
c# - XNA - 自动导入多个文件和文件夹并设置它们的属性
我现在正在开发一个游戏项目,其中游戏的每个级别都由一个显示物理布局的文本文件表示(类似于 xna 平台游戏示例),相应的 xml 文件包含有关级别的其余信息。每个文本文件和 xml 文件都放在以关卡 ID 命名的自己的文件夹中。
不幸的是,这意味着我需要手动创建每个文件夹,然后导入这两个文件,然后将这两个文件的构建操作设置为“无”,并将复制到输出目录设置为“如果较新则复制”。
有没有办法为大量文件/文件夹自动执行此操作?还是我应该尝试不同的系统?
3d - 关于模型的顶点缓冲区和索引缓冲区的混淆
我有一个模型文件,其中包含多个网格(即:一棵树、一辆车……),用作我们游戏的静态背景。我的目标是将模型的顶点和索引存储为两个缓冲区,并将这些缓冲区分配给 GPU。然而,我在去的路上有点迷茫。
这个Riemer 的 XNA 教程指出模型本身有一个大顶点缓冲区和一个大索引缓冲区,其中包含所有网格(和网格部分)的信息,但似乎无法访问这些缓冲区。但是,可以访问 ModelMeshParts 的缓冲区,但我不能将它们全部连接到一个缓冲区中。
我的猜测是扩展模型处理器以在运行时将模型顶点和索引存储在数组中。有没有更简单的方法,因为 Riemer 说这些缓冲区已经定义?我对这种说法感到困惑。
谢谢你的回答。