在delphiprism中实现XNA

在delphiprism中实现XNA,xna,delphi-prism,oxygene,xna-3.0,Xna,Delphi Prism,Oxygene,Xna 3.0,我已经安装了Delphi Prism和XNA Game Studio 3.0。我已经成功地将Delphi Prism XNA教程1“在屏幕上显示三维模型”(Displaying a 3D Model on the Screen)翻译成了。 Project编译得很好,但我无法加载模型。看起来XNA中有一个新的“contentproj”类型,它不在Delphi Prism中。。。 知道如何让它工作吗?我还没有做任何XNA的东西,但这里是我最好的猜测:-) 因此,内容项目类型是标准XNA项目的子项目,

我已经安装了Delphi Prism和XNA Game Studio 3.0。我已经成功地将Delphi Prism XNA教程1“在屏幕上显示三维模型”(Displaying a 3D Model on the Screen)翻译成了。 Project编译得很好,但我无法加载模型。看起来XNA中有一个新的“contentproj”类型,它不在Delphi Prism中。。。
知道如何让它工作吗?

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

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

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

编辑:


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


这就留下了一个问题:XNA内容管道编译过程是如何启动的,如果它不是“刚好发生”,这可能是marc hoffman等人的一个问题

希望这有点帮助,这只是一个猜测

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


Rgds Tim Jarvis。

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


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

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


以下是有关此的详细信息:

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


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

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;

如果能有更多关于如何做到这一点的具体细节就好了。即使是这篇博文也有点粗略