为什么要使用单独的加载方法而不是构造函数?

莱尔·康威(Layl Conway)

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么要使用 list() 构造函数?

为什么要使用move构造函数?

Java:为什么使用方法而不是构造函数?

为什么还要使用空白的构造函数?

为什么要使用小数(int [])构造函数?

为什么需要使用多个构造函数?

为什么要使用IFFE来构造函数

为什么要使用本机函数而不是系统调用?

人们为什么要使用ThreadPoolExecutor而不是直接调用函数?

Solidity:为什么使用 Initialize 函数而不是构造函数?

为什么我要使用异步而不是非异步方法

为什么LocalDate,LocalTime和Stream对象使用工厂方法of()而不是构造函数?

为什么Java Pattern类使用工厂方法而不是构造函数?

为什么它需要默认构造函数而不是直接使用我的工厂方法?

为什么要重载构造函数而不是使用返回自引用的方法?

为什么要使用外部OpenGL加载程序功能而不是GLAD的内置加载程序?

为什么在CDI中使用构造函数而不是setter注入?

什么是基类构造函数,为什么要使用它?(带有示例)

将 List 添加到嵌套 List 时,为什么需要使用构造函数来创建新的 List 实例,而不是仅添加现有的 List?

TFPCustomHashTable构造函数使用196613常量。为什么要使用此特定值?

为什么要使用IHttpActionResult而不是HttpResponseMessage?

为什么要使用isinstance()而不是type()?

为什么要使用uImage而不是zImage

为什么要使用var而不是类型?

为什么要使用jQuery on()而不是click()

为什么要使用beforeRouteEnter而不是挂载?

为什么要使用Runnable而不是Thread?

为什么要使用移位而不是for循环?

为什么要使用资源而不是路由?