是的,可以在库项目中加载内容。ContentManager
您可以在类之外创建一个实例Game
并使用它来加载您的内容。
创建一个新实例的技巧ContentManager
是两个构造函数,它们都接受一个实例IServiceProvidor
作为第一个参数。无论你创建什么类都ContentManager
可以实现这个接口。您只需要从此接口实现一种方法,那就是:
public object GetService(Type serviceType)
它将被 调用ContentManager
以检索 的实例IGraphicsDeviceService
。您需要一个可以实现此接口的类,该接口主要是与设备创建和销毁相关的事件。有一个重要的属性需要实现,那就是:
public GraphicsDevice GraphicsDevice
我将在这个答案中留下很多样板代码,因为你可以在 internetz 的其他地方找到它。下面的代码假定您已经初始化了 XNA 图形系统并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 框架处理繁重的工作,您只需担心渲染场景和创建图像。
Axiom ( http://www.axiom3d.net ) 是一个 C# 引擎,能够为位图图像生成 3D 场景。