Возьмем ранее созданный пустой проект для десктопной версии Windows (или создадим новый проект для десктопной версии Windows для DirectX). Этот проект ничего не делает и пока просто выводит окно приложения, закрашенное синим цветом. Теперь разнообразим проект.
Редкое игровое приложение обходится без спрайтов. Спрайты представляют собой изображения, которые интегрированы в игровую сцену. Для различных игровых объектов могут быть свои спрайты. Для использования спрайтов добавим в проект какой-нибудь файл изображения.
Для этого откроем в проекте папку Content и затем нажмем на Content.mgcb. После этого должно открыться следующее окно:
Если вдруг узел Content в левом верхнем углу отсутствует, то в этом случае надо открыть дополнительно в этом окне через меню File->Open открыть файл Content.mgcb. В последующем он будет автоматически открываться.
Далее через меню Edit - > Add -> Existing Item... добавим файл изображения:
Если файл изображения находится вне проекта, то отобразится специальное окно с вопросом, надо ли копировать файл в папку проекта.
Оставим выбор по умолчанию и нажмем OK. После этого файл изображения будет добавлен в проект. И нам надо будет выполнить построение с помощью меню Build -> Build:
Итак, изображение добавлено. Теперь используем его в приложении. Для этого возьмем стандартный код в файле Game1.cs и изменим его следующим образом:
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace Game1 { public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D texture; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); texture = Content.Load<Texture2D>("monokot"); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // отрисовка спрайта spriteBatch.Begin(); spriteBatch.Draw(texture, Vector2.Zero, Color.White); spriteBatch.End(); base.Draw(gameTime); } } }
Изменений здесь на самом деле не так много. Во-первых, была добавлена глобальная переменная типа Texture2D, которая будет хранить изображение:
Texture2D texture;
Данный объект называется текстурой. Текстура в компьютерной графике представляет двухмерное изображение, которое обычно применяется к поверхностям объекта.
Далее нам надо загрузить изображение в эту переменную. Загрузка ресурсов происходит в методе LoadContent()
:
texture = Content.Load<Texture2D>("monokot");
В моем случае изображение называется monokot.jpg. При загрузке изображения в проект соответствующий ему ресурс называется по имени файла без расширения. Поэтому для загрузки графического ресурса в переменную я использую название "monokot". Соответственно, если у вас отличается название файла, то в данном случае его надо использовать вместо "monokot".
Метод Load
класса ContentManager загружает ресурс. Поскольку этот метод является обобщенным, то нам также надо в угловых
скобках указать тип ресурса - Texture2D. И после загрузки объект изображения готов к использованию.
В методе Draw()
происходит отрисовка спрайта:
spriteBatch.Begin(); spriteBatch.Draw(texture, Vector2.Zero, Color.White); spriteBatch.End();
Для отрисовки используется объект spriteBatch, тип которого - SpriteBatch. Этот объект автоматически добавляется в проект при его создании и инициализируется в методе LoadContent. Отрисовка происходит между вызовами Begin и End объекта SpriteBatch.
Метод spriteBatch.Draw()
, который выводит спрайт, принимает три параметра:
texture
: представляет тип Texture2D, то есть фактически изображение, которое надо нарисовать
position
: представляет тип Vector2 и указывает на координаты верхнего левого угла, в котором происходит отрисовка
изображения. В данном случае для этого параметра передается значение Vector2.Zero
, которое означает нулевые координаты для X и Y (отсчет
координат идет от верхнего левого угла)
color
: представляет тип Color и указывает на цвет подцветки
И при запуске приложения отобразится изображение: