![]() |
|
![]() |
![]() |
Новости | Конференция | Чат | База данных | Творчество | Сообщество | О сайте | English |
![]() |
Помощь сайту |
![]() |
![]() |
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Так... На чём мы остановились? Ну да, ну да... На GraphicsDevice. Ну вроде бы пора делать первые свершения, ну там, с 3d побаловаться... Но нет. Рано ещё! Наберитесь терпения. Прежде чем заниматься серьёзными делами, нужно оглянуться назад и посмотреть на то, что уже сделано. И что же сделано? В предыдущем уроке мы создали окно при загрузке которого инициализируется графическое устройство, а рендеринг идёт в обработчике события Paint. Не слишком ли приметивно? Нет, ну так оставлять это свинство. Какой выход? Можно, конечно написать свои классы организации игрового цикла, но зачем? Ведь есть класс... Game Находится в пространстве имён Microsoft.XNA.Framework Основная задача этого класса облегчить нам жизнь. Сам класс Game в чистом виде не может нам чем-либо помочь. Но вот если мы унаследуем свой класс от класса Game... Что бы разобраться в использовании класса Game нужно сначала разобраться в его возможностях. И так... Что нам даёт наследование своего класса от класса Game. Всё довольно просто. У нас появляется возможность перекрыть ряд защищённых методов, которые будут нам очень полезны. Если кому-то что-то не понятно из терминологии программирования, то извините я пока не пишу статьи по ООП и C#. Базовые знания по этим двум темам у вас должны быть в обязательном порядка, если вы, конечно, хотите что-либо понять. Так вот... Приведу эти полезные методы в таблице
Пока остановимся на этих трёх методах. Хотя ещё стоит упомянуть вскользь такие методы, как LoadContent, UnLoadContent и другие. Они тоже очень полезны, но не всё сразу. Они буду рассмотрены по мере надобности. Так же стоит обратить внимания на события, доступные в классе Game
Что ж, разобрались с необходимыми возможностями. Пора бы и переделать пример из предыдущего урока. Инициализацию устройства переносим в метод Initialize Прорисовку переносим в метод Draw А вот в метод Update запишем изменение цвета окна. Color color; protected override void Update(GameTime gameTime) { Random rand = new Random(); color = new Color((byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)); } Всё хорошо и красиво, но как запустить игру? И опять всё элементарно вызов матода Run() класса Game, а точнее нашего класса, наследованного от Game. Ну вот... Все цвета радуги. Но это ещё не всё... Инициализировать GrapicsDevice напрямую покажется не всем хорошей затеей. И действительно, попробуйте установить какое-то совершенно не подходящее разрешение (1023х769, например). Приехали... Вылетело исключение. К тому же изменение настроек на лету тоже не самая тривиальная задача. На этот случай имеется класс GraphicsDeviceManager Для чего служит этот класс. Всё опять не сложно. При создании экземпляра этого класса мы указываем каким классом, наследованным от Game будет опекаться менеджер new GraphicsDeviceManager(Game game); После этого мы задаём желаемые настройки. После чего вызываем метод ApplyChanges(). В случае, если эти настройки могут быть применимы они вступают в силу, иначе подбираются максимально близкие по значению настройки системы и применяются именно они. И вот вместо исключения мы получаем всего лишь немного отличный от желаемого режим работы. Мы ещё не раз вернёмся к этим двум классам в следующих уроках. А пока всё. Исходники примера к этому уроку можно найти тут.
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
Дизайн Elite Games V5 beta.18 EGM Elite Games Manager v5.17 02.05.2010 |
![]() |