我正在学习 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),例如 IUpdateable
和 IDrawable
。另外两个类实现这些接口(interface)并提供逻辑: GameComponent
和 DrawableGameComponent
。
这些接口(interface)和类背后的想法是游戏的所有组件都具有类似的更新/绘制周期。它标准化了方法的名称和参数(Initialize、LoadContent、Update、Draw 等),并提供了自定义组件应该是什么样子的框架。根据您的类是否需要更新、绘制或不需要这些,您可以继承这些类。
这就是 GameComponentCollection
起作用的地方:您可以将组件添加到 Game.Components
中,基本 Game 类将通过调用 Update() 和 Draw() 自动处理更新周期,而无需您的干预。您还可以设置组件与 GameComponent
和 DrawableGameComponent
提供的属性之间的调用顺序。
无论如何,似乎有些人(包括我在内)和许多教程并没有在他们的代码中使用这种可能性。您可以自己从自定义类中自由调用 Initialize、LoadContent、Update 和 Draw。在这种情况下,您的程序似乎不需要调用 base.Update(...)
和 base.Draw(...)
。
关于c# - Monogame中base.Update和base.Draw的功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30139877/