首先,我是 C# 和 XNA 的新手(在 C++ 之前)
我已经搜索了一半的网络,并且我相信整个 stackoverflow,但我没有找到答案。在我的项目中,我想创建一个 GraphicsManager:它的工作是为开放世界游戏加载/卸载资源,提供更抽象的渲染工具(加载瓦片集,从瓦片集中选择瓦片等)等等。
这就是为什么将所有与图形相关的对象放在 GraphicsManager 中感觉很自然的原因。
class GraphicsManager : Manager
{
// provided by XNA project
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public override void Initialize(Game caller)
{
mainObj = caller;
graphics = new GraphicsDeviceManager(mainObj);
}
}
// constructor of the Game class
public Game()
{
Graphics.GraphicsManager.Instance.Initialize(this);
Content.RootDirectory = "Content";
}
一段时间后我发现我需要在 Initialize() 之前创建 GraphicsDeviceManager,因为它会强制它调用 LoadContent() - 我可以理解:GraphicsDeviceManager 的构造函数对提供的 Game 对象执行一些操作以更改其 Initialize()方法(或类似的东西)。
这就是我更改代码的原因,所以它在 Game 的构造函数中运行 GraphicManager 的 Initialize()。不幸的是,这样它就不会调用 LoadContent()。为什么?
PS。只需在类中声明任何 GraphicsDeviceManager 对象就足够了,无需实例化 - 然后它将起作用。对我来说完全是无稽之谈 :/
@Scott W我删除了Game
构造函数,将类重命名为(为Game1
)并创建了这个方法:
protected override void Initialize()
{
// TODO: Add your initialization logic here
Graphics.GraphicsManager.Instance.Initialize(this);
Content.RootDirectory = "Content";
base.Initialize();
}
但现在它不会调用LoadContent
. 有任何想法吗?