Поскольку мне нужно несколько экранов, 1) могу ли я определить более одного игрового класса (унаследованного от Microsoft.Xna.Framework.Game и с разными именами классов). 2) есть ли конструктивные недостатки, создающиеся таким образом?
Классы игр XNA
Ответы (2)
Я не думаю, что это возможно в Windows Phone 7. Платформа запускает игру XNA, находя класс, производный от Game
для экземпляра (в отличие от Xbox и Windows, где вы сами создаете экземпляр). Я подозреваю, что это не удастся, если у вас есть более одного производного класса. (Можно попробовать.)
Тогда есть проблема GraphicsDevice
. Я подозреваю, что на WP7 невозможно настроить два экземпляра графического устройства. Как изменить, какой из них может писать на экран? Я не знаю ни одного API для этого.
Кроме того, если у вас было два отдельных графических устройства, вы не могли обмениваться контентом между ними. Вам придется загружать его дважды - проблема с производительностью.
Теоретически вы можете настроить два экземпляра Game
для использования одного GraphicsDevice
. Но это требует написания собственной заменяющей версии GraphicsDeviceManager
. Это непростая задача — и, безусловно, намного сложнее, чем простая настройка простого конечного автомата для обработки разных экранов.
Возможно, ознакомьтесь с примером Game State Management. того, как это должно быть сделано.
Программа начинается с инициализации класса Game1
, который наследует класс Game
. Так что я не думаю, что это хорошая идея, чтобы изменить этот автоматический код.
Более того, как следует из названия; если у вас есть несколько классов Game
, это означает, что вы запускаете несколько «Игр». Но это не так. Вместо этого у вас есть несколько экранов в одном Game
.
Чтобы разделить эти экраны, вы можете иметь разные DrawableGameComponent
. Он также содержит собственные методы Draw
и Update
, которые вы можете реализовать. Позже вы можете добавить все эти DrawableGameComponent
в список Components
свойство из Game1
.
Вся сложность будет распределена между DrawableGameComponent
s. Их методы Draw
и Update
будут автоматически вызываться XNA.
Это может оказаться полезным.
Я думаю, что это хороший способ. Любые лучшие предложения приветствуются