为什么DrawableGameComponent需要调用base.Draw()?

时间:2015-03-09 10:50:24

标签: c# xna

我正在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);
        }

2 个答案:

答案 0 :(得分:0)

也许是因为如果您开始使用例如raceCar,bigCar等扩展您的Car类,您可能不想重新编写您在基础汽车类中编写的绘制函数声明。这是在POO编程中使用base.Draw()或基础的主要原因。

答案 1 :(得分:0)

回答我自己的问题:一旦从类继承并覆盖函数,编辑器会自动插入base.Draw()行。

在这种情况下,父类在Draw()中没有任何代码,因此不需要在子函数的Draw函数中调用base.Draw()。