我正在XNA / Monogame框架中创建一个基本游戏。我使用DrawableGameComponent,以便自动调用其Draw()和Update()函数。
到目前为止,这么好,但我不明白的是base.Draw()在DrawableGameComponent实例中引用的内容,以及为什么需要它。在我的例子中,我甚至可以将它排除在外,游戏仍然运行良好。
代码摘录:(评论中的问题)
Game1.cs
protected override void Initialize()
{
Car car3 = new Car(this, new Vector2(450, 100), Color.GreenYellow);
base.Initialize();
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
SpriteBatch.Begin();
// this calls Game.Draw - and this loops through all the game components and draws them
base.Draw(gameTime);
SpriteBatch.End();
}
和Car.cs
public override void Draw(GameTime gameTime)
{
// this draws the car after Car.Draw() gets called by the Game class
Game1.SpriteBatch.Draw(Texture,Position,Color);
// but why do we call base.Draw here? The car is already drawn.
// and the DrawableGameComponent.Draw method is empty, so we dont really need to call that?
// what's more, if I comment this code out, the game still works.
base.Draw(gameTime);
}
答案 0 :(得分:0)
也许是因为如果您开始使用例如raceCar,bigCar等扩展您的Car类,您可能不想重新编写您在基础汽车类中编写的绘制函数声明。这是在POO编程中使用base.Draw()或基础的主要原因。
答案 1 :(得分:0)
回答我自己的问题:一旦从类继承并覆盖函数,编辑器会自动插入base.Draw()行。
在这种情况下,父类在Draw()中没有任何代码,因此不需要在子函数的Draw函数中调用base.Draw()。