OpenTK有一个单独的Load()方法,当必须加载游戏时会调用该方法。XNA和MonoGame更进一步,并拥有构造函数Initialize和LoadContent。所有这些似乎对我来说都是有用的,因为使用框架的程序员在应该加载某些内容时会感到困惑,而且我不能百分百确定在构造类时会初始化该类。出于什么原因?
XNA具有构造函数Initialize和LoadContent()是有原因的。当您创建新游戏时,例如
static class Program
{
static void Main()
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
Game1的构造函数被调用,并负责预初始化任务,例如
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
Components.Add(new gamecomponent());
并设置类的属性。您可以像通常那样使用构造函数。调用构造函数后,将调用该Game.Run()
方法。这将启动游戏并调用initialize方法。因此,在上面Program
,一旦game.Run()
被调用,就会发生几件事。首先,Game1
调用的Initialize方法。此方法通常看起来像:
protected override void Initialize()
{
// now that the GraphicsDevice has been created, we can create the projection matrix.
projectionMatrix = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45.0f), GraphicsDevice.Viewport.AspectRatio, 1f, 10000);
base.Initialize();
}
您可能会注意到,projectionMatrix
此游戏的是在此方法(而不是构造函数)中创建的,因为Game.Run()
调用了graphicsDevice已初始化一次。初始化方法完成后,将Base.Initialize()
调用游戏前任务,该任务有两件事。首先,GameComponents
将枚举并初始化您添加到游戏中的任何内容。其次,一旦在游戏和游戏组件中都初始化了所有内容,并且图形设备准备就绪,就会调用LoadContent()。
现在,您可能想知道为什么LoadContent()
它不是初始化方法的一部分。好吧,我相信主要原因是这样,以便您可以在需要时重新加载内容,例如“发生DeviceReset事件时”,或者需要重置诸如模型网格物体骨骼之类的内容时。
因此,总而言之,构造函数将像通常那样创建类及其属性,然后,一旦Initialize
调用了该方法,游戏便会在所有GameComponents
初始化并加载了Content之后开始运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句