我有一个复杂的问题,因为我没有想法我再次来到这里。
我在应用程序上生成任何3D引擎的镜头,我(不幸的是)建议XNA实现这一点,因为我们想用c#制作应用程序。我想给我的编程伴侣发送一个带有XNA代码的库(以接口的形式),所以他甚至不知道如何生成图像。
这是我的问题 - 我无法为我的场景加载模型和纹理因为contentmanager不在库项目中,尽管我没有单独运行xna游戏的问题。
所以这是我的问题:
任何帮助将不胜感激。
答案 0 :(得分:1)
是的,可以在库项目中加载内容。您可以在ContentManager
类之外创建Game
的实例,并使用它来加载您的内容。
创建ContentManager
的新实例的技巧是两个构造函数,它们都接受IServiceProvidor
的实例作为第一个参数。无论您在哪个类中创建ContentManager
in都可以实现此接口。您需要从此界面实现一种方法,即:
public object GetService(Type serviceType)
ContentManager
将调用它以检索IGraphicsDeviceService
的实例。您将需要一个可以实现此接口的类,该接口主要是与设备创建和销毁相关的事件。有一个重要的属性需要实现,即:
public GraphicsDevice GraphicsDevice
我将留下这个答案的许多样板代码,因为你可以在internetz上的其他地方找到它。下面的代码假设您已经初始化了XNA Graphics系统并在创建此类的实例之前创建了GraphicsDevice
public class ImageGenerator : IServiceProvider, IGraphicsDeviceService
{
public GraphicsDevice GraphicsDevice { get; private set; }
public ContentManager ContentManager { get; private set; }
public ImageGenerator( GraphicsDevice device )
{
this.GraphicsDevice = device;
this.ContentManager = new ContentManager( this );
}
public object GetService(Type serviceType)
{
if (serviceType == typeof(IGraphicsDeviceService))
{
return this;
}
return null;
}
public event EventHandler<EventArgs> DeviceCreated;
public event EventHandler<EventArgs> DeviceDisposing;
public event EventHandler<EventArgs> DeviceReset;
public event EventHandler<EventArgs> DeviceResetting;
}
然而,在走这条路线之前,我建议你研究子类化Game
并允许XNA Framework处理繁重的工作,你可以担心渲染一个场景并创建图像。
Axiom(http://www.axiom3d.net)是一个C#引擎,能够为位图图像生成3D场景。