3

我已经安装了 Delphi Prism 和 XNA Game Studio 3.0。我已成功翻译为 Delphi Prism XNA 教程 1“在屏幕上显示 3D 模型”(http://msdn.microsoft.com/en-us/library/bb197293.aspx)。项目编译良好,但我无法加载模型。看起来XNA中有一个新的“contentproj”类型不在Delphi Prism中......知道如何让它工作吗?

4

5 回答 5

4

您可以使用 msbuild 手动构建内容项目。它可能没有相同的集成,您可以在解决方案资源管理器中添加内容和更改设置......但它会成功:-)

这是有关此的更多信息:http: //blogs.msdn.com/shawnhar/archive/2006/11/07/build-it-ahead-of-time.aspx

于 2008-11-28T13:51:27.943 回答
2

我终于设法通过 1)从命令行使用 MSBuild 构建“* .contentproj”,2)将生成的“内容”目录作为输出我的 Delphi Prism 可执行文件的子目录来使其工作。

让 Delphi Prism 自动识别 *.contentproj 并自动构建它会很好。

于 2008-12-09T15:23:28.357 回答
0

我还没有做过任何 XNA 的东西,但这是我最好的猜测 :-)

因此,Content Project 类型是标准 XNA 项目的子项目,它只是将游戏内容(纹理、声音等)编译为嵌套编译过程,对吗?

所以我假设在项目文件或解决方案文件中必须有对子项目的引用,也许最好的方法是在 C# 或 VB 中创建一个简单的 XMA 项目并查看生成的元文件( csproj、contentproj 等)

编辑:


哦,我在这里建议您手动创建 contentproj 文件并插入引用,一旦您知道它们的样子,我假设 VS 将允许您添加、删除您的内容等


然后剩下的问题是 XNA 内容管道编译过程是如何被触发的,如果它不是“刚刚发生”,这可能是 marc hoffman 等人的问题

希望这会有所帮助,这只是一个猜测。

顺便说一句,很高兴在 StackOverFlow 见到你。

Rgds 蒂姆·贾维斯。

于 2008-11-27T21:40:21.893 回答
0

据我所知,Prism 只是公布了,没有发布。因此,试验不是最终产品。作为 RO 客户,我希望收到一封电子邮件,但不会在此之前发布,除非是发布它。坦率地说,我不知道 XNA 支持已经完成,甚至还没有工作。考虑到 Prism 的正式发布最快还有将近一个月的时间,你尝试这个可能还为时过早。

我不知道该告诉您如何解决 XNA 的问题,但等待 Prism 本身是明智的。在 Prism 发布之前,我会认为 XNA 支持“待定”。

于 2008-11-27T21:49:12.267 回答
0

System.reflection 可用于访问 XNA 的内部工作以创建 xnb 文件

method Game1.LoadContent;
var
    importer : TextureImporter;
    texContent : Texture2DContent;
    cc : ContentCompiler;
    fullPath : String;
    fs : FileStream;
    args : array[1..7] of System.Object;
    begin
    spriteBatch := new SpriteBatch(GraphicsDevice);
    importer := new TextureImporter;
    texContent := importer.Import(’asset.png’, nil) as Texture2DContent;

    var compilerType := typeOf(ContentCompiler);

    cc := compilerType.GetConstructors(BindingFlags.NonPublic or BindingFlags.Instance)[0].Invoke(nil) as ContentCompiler;

    var compileMethod := compilerType.GetMethod("Compile", BindingFlags.NonPublic or BindingFlags.Instance);

    fullPath := ‘assestName.xnb’;

    fs := File.Create(fullPath);

    args[1] := fs;
    args[2] := texContent;
    args[3] := TargetPlatform.Windows;
    args[4] := GraphicsProfile.Reach;
    args[5] := true;
    args[6] := fullPath;
    args[7] := fullPath;

    compileMethod.Invoke
    (
        cc,
        args
    );

    //SpriteTexture := Content.Load(’assetName’);
end;
于 2013-07-09T01:21:00.573 回答