我正在学习 this website 的基本 Monogame 教程。
我想不通的是为什么 Game1.cs 包括对 base.Update base.Draw 的调用?如果我删除这些函数调用,它似乎不会以任何方式影响我的游戏......

代码 Game1.cs

        protected override void Update (GameTime gameTime)
        {
             // update my car class
             _myCar.Update();
            // what does this do? It seems I can leave it out?
            base.Update (gameTime);
        }

        protected override void Draw (GameTime gameTime)
        {
            // draw my car
            _spriteBatch.Begin ();
            _myCar.Draw (_spriteBatch);
            _spriteBatch.End ();

            // what does this do?
            base.Draw (gameTime);
        }

最佳答案

根据 Dylan Wilson 链接的 source code of MonoGame,来自基类 Game 的 Update 和 Draw 方法只是在过滤的 Update(...) 的每个元素上调用 Draw(...)GameComponentCollection ,一个 IGameComponent 的集合。
IGameComponent 是一个界面,显示 XNA 和 Monogame 希望您如何管理您的代码。它带有其他接口(interface),例如 IUpdateableIDrawable 。另外两个类实现这些接口(interface)并提供逻辑: GameComponentDrawableGameComponent

这些接口(interface)和类背后的想法是游戏的所有组件都具有类似的更新/绘制周期。它标准化了方法的名称和参数(Initialize、LoadContent、Update、Draw 等),并提供了自定义组件应该是什么样子的框架。根据您的类是否需要更新、绘制或不需要这些,您可以继承这些类。

这就是 GameComponentCollection 起作用的地方:您可以将组件添加到 Game.Components 中,基本 Game 类将通过调用 Update() 和 Draw() 自动处理更新周期,而无需您的干预。您还可以设置组件与 GameComponentDrawableGameComponent 提供的属性之间的调用顺序。

无论如何,似乎有些人(包括我在内)和许多教程并没有在他们的代码中使用这种可能性。您可以自己从自定义类中自由调用 Initialize、LoadContent、Update 和 Draw。在这种情况下,您的程序似乎不需要调用 base.Update(...)base.Draw(...)

关于c# - Monogame中base.Update和base.Draw的功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30139877/

10-13 08:55