2015-05-09 1 views
0

Я следую основному учебнику Monogame от this website. Я не могу понять, почему Game1.cs включает вызовы на base.Update и base.Draw? Если удалить эти вызовы функций, это, похоже, не влияет на мою игру в любом случае ...Функция base.Update и base.Draw в Monogame?

код 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); 
     } 
+0

Достаточно легко проверить, что делают эти базовые методы, поскольку MonoGame является открытым исходным кодом. https://github.com/mono/MonoGame/blob/develop/MonoGame.Framework/Game.cs – craftworkgames

ответ

2

Соответственно к source code of MonoGame связанный Дилан Уилсон, обновления и Нарисуйте методы из базового класса. Игра называется только Update(...) и Draw(...) на каждый элемент отфильтрованного GameComponentCollection, сборник IGameComponent.

IGameComponent - это интерфейс, который показывает, как XNA и Monogame хотят, чтобы вы управляли своим кодом. Он поставляется с другими интерфейсами, такими как IUpdateable и IDrawable. Два других класса реализуют эти интерфейсы и обеспечивают логику: GameComponent и DrawableGameComponent.

Идея этих интерфейсов и классов состоит в том, что все компоненты игры имеют аналогичный цикл обновления/рисования. Он стандартизирует имена и параметры метода (Initialize, LoadContent, Update, Draw, ...) и предоставляет скелет того, каким должен быть ваш пользовательский компонент. В зависимости от того, должны ли ваши классы обновляться, рисоваться или ни одна из них, вы можете наследовать эти классы.

Здесь GameComponentCollection: вы можете добавить свои компоненты в Game.Components, а базовый класс игры автоматически обработает цикл обновления, вызвав Update() и Draw() без вашего вмешательства. Вы также можете установить порядок вызова между компонентом со свойствами предложений по GameComponent и DrawableGameComponent.

В любом случае, кажется, что некоторые люди (включая меня) и номера учебных пособий не используют эту возможность в своем коде. Вы можете самостоятельно вызывать Initialize, LoadContent, Update и Draw из своего пользовательского класса. В этом случае, кажется, что вызовы base.Update(...) и base.Draw(...) не требуются в вашей программе.

 Смежные вопросы

  • Нет связанных вопросов^_^