在delphiprism中实现XNA
我已经安装了Delphi Prism和XNA Game Studio 3.0。我已经成功地将Delphi Prism XNA教程1“在屏幕上显示三维模型”(Displaying a 3D Model on the Screen)翻译成了。 Project编译得很好,但我无法加载模型。看起来XNA中有一个新的“contentproj”类型,它不在Delphi Prism中。。。在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项目的子项目,
知道如何让它工作吗?我还没有做任何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;
如果能有更多关于如何做到这一点的具体细节就好了。即使是这篇博文也有点粗略