Классы игр XNA

Поскольку мне нужно несколько экранов, 1) могу ли я определить более одного игрового класса (унаследованного от Microsoft.Xna.Framework.Game и с разными именами классов). 2) есть ли конструктивные недостатки, создающиеся таким образом?


person Yogesh    schedule 09.10.2012    source источник
comment
Интересный вопрос. Обычный подход заключается в создании FSM (конечного автомата), поэтому каждый экран представляет собой одно состояние. Это означает наличие только одного игрового класса. Но не уверен, что можно иметь несколько.   -  person Oscar Foley    schedule 09.10.2012
comment
Хорошо иметь один класс Game. У вас могут быть разные DrawingComponent для разных экранов.   -  person Shashwat    schedule 09.10.2012
comment
@Shashwat, мы можем иметь несколько классов Game для каждого экрана вместо -основанного на состоянии, переключаясь между объектами экрана. если я ошибаюсь, пожалуйста, дайте мне знать причину?   -  person Yogesh    schedule 09.10.2012


Ответы (2)


Я не думаю, что это возможно в Windows Phone 7. Платформа запускает игру XNA, находя класс, производный от Game для экземпляра (в отличие от Xbox и Windows, где вы сами создаете экземпляр). Я подозреваю, что это не удастся, если у вас есть более одного производного класса. (Можно попробовать.)

Тогда есть проблема GraphicsDevice. Я подозреваю, что на WP7 невозможно настроить два экземпляра графического устройства. Как изменить, какой из них может писать на экран? Я не знаю ни одного API для этого.

Кроме того, если у вас было два отдельных графических устройства, вы не могли обмениваться контентом между ними. Вам придется загружать его дважды - проблема с производительностью.

Теоретически вы можете настроить два экземпляра Game для использования одного GraphicsDevice. Но это требует написания собственной заменяющей версии GraphicsDeviceManager. Это непростая задача — и, безусловно, намного сложнее, чем простая настройка простого конечного автомата для обработки разных экранов.

Возможно, ознакомьтесь с примером Game State Management. того, как это должно быть сделано.

person Andrew Russell    schedule 09.10.2012

Программа начинается с инициализации класса Game1, который наследует класс Game. Так что я не думаю, что это хорошая идея, чтобы изменить этот автоматический код.

Более того, как следует из названия; если у вас есть несколько классов Game, это означает, что вы запускаете несколько «Игр». Но это не так. Вместо этого у вас есть несколько экранов в одном Game.

Чтобы разделить эти экраны, вы можете иметь разные DrawableGameComponent. Он также содержит собственные методы Draw и Update, которые вы можете реализовать. Позже вы можете добавить все эти DrawableGameComponent в список Components свойство из Game1.

Вся сложность будет распределена между DrawableGameComponents. Их методы Draw и Update будут автоматически вызываться XNA.

Это может оказаться полезным.

Я думаю, что это хороший способ. Любые лучшие предложения приветствуются

person Shashwat    schedule 09.10.2012