Создаём первый проект в XNA Game Studio - Часть 1

XNA Game Studio

Этой публикацией я начинаю цикл статей о разработке при помощи XNA Game Studio. Частично все публикации будут переводом справочной информации с добавлением учебных проектов и их исходных кодов.

В части первой я приведу пример создания простенького 2D приложения, в котором мы добавим в проект спрайт (картинку) и заставим её перемещаться по игровому пространству.

Здесь я не буду вам долго рассказывать как установить среду разработки, ведь это мелочи и с ними можно разобраться самостоятельно. Скажу лишь одно — для разработки вам понадобится Microsoft Visual Studio 2008 либо бесплатная версия – Microsoft Visual C# 2008, видеокарта с поддержкой DirectX 9.0c и как минимум шейдеров версии 1.1, XNA Game Studio.

От себя.

Хочу особо заметить, что XNA Game Studio — лучший вариант для молодых разработчиков игр (школьников, студентов и просто любителей этого увлекательного занятия), людей которые совсем недавно начали заниматься разработкой на C# под платформу .NET и хотели бы сделать что нибудь эдакое, перед друзьями похвастаться и просто для души. Простота с которой в этой среде создаются приложения просто поражает, это пожалуй делает её лучшим вариантом для использования в учебных целях.

1. Создаём новый проект.

Здесь всё как обычно, после установки XNA Game Studio при создании нового проекта среди возможных проектов появятся 2 вкладки с проектами XNA Game Studio 3.0 и XNA Game Studio 3.1.

В нашем случае выбираем проект Windows Game (3.1), задаём каталог проекта и его наименование. Жмём OK. После чего будет создан проект с заполненным основным кодом вашей игры. Её даже можно запустить, правда ничего пока не увидите, поскольку будет отображён только фон и всё что можно сделать с таким приложением это закрыть.


2. Структура автоматически созданного кода.

Большую часть сложной работы система уже сделала для вас. И всё подготовлено для добавления вашего кода в проект.

Итак, что мы имеем:

Метод Initialize для всего что не требует задействования Графического Устройства (GraphicsDevice).
Метод LoadContent Здесь подгружаются в проект необходимые модели и текстуры.

Метод UnloadContent Здесь наоборот выгружаются, пока нам не понадобится никак.

Update используется для работы с логикой, реализацией движения объектов, анализа поступающей информации от пользователя (игрока) и т.п.

Draw здесь происходит прорисовка объектов.

3. Добавляем спрайт.

Следующий шаг — это добавление графического объекта для вывода на игровой экран (спрайта). Для этого можно использовать небольшой графический файл .bmp, .jpg или .png.

Создаём картинку (любую) на вашем компьютере для использования в качестве спрайта в нашем приложении, создать можно в Paint, а можно вытянуть из какой нибудь коллекции в интернете, я использовал привидение из коллекции.

Убедитесь что доступна панель справа (Solution Explorer), если её не видно, то в меню View выберите пункт Solution Explorer и она появится.

На вкладке Content вы увидите файлы ассоциированные с вашим проектом.

Для добавление спрайта нажмите правой кнопкой мыши по вкладке Content, выберите Add (добавить), выберите Existing Item, и добавьте ваше изображение.
После добавления графический файл будет доступен в Solution Explorer.

Выберите появившийся элемент во вкладке Content. (вкладка может быть свёрнута, чтобы развернуть нажмите на знак "+" перед вкладкой. Появится окно свойств элемента (Properties)
в нём есть параметр «Asset Name» — это имя элемента по которому вы сможете к нему обращаться из кода программы.

По умолчанию параметр позаимствует значение у имени файла, в нвшем случае я изменил параметр на значение «MySprite».

Если вы не видите окно свойств (Properties), нажмите F4, или выберите View -> Properties Window.

Теперь нам надо написать код который загрузит и отобразит спрайт на экране.
Возвращаемся к коду нашей программы Game1.cs, находим там метод LoadContent и изменяем его вот так:

//Наш спрайт.
Texture2D myTexture;

protected override void LoadContent()
        {
            // Создаём объект спрайта SpriteBatch, который будем рисовать.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            myTexture = Content.Load<Texture2D>("MySprite");
        }


Обязательно убедитесь что параметр Asset Name = MySprite.

Далее меняем метод Draw, для того чтобы отобразить наш спрайт на игровом пространстве, вот так:
// Параметр - устанавливает координаты отображения нашего спрайта.
Vector2 spritePosition = Vector2.Zero;

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            // Рисуем наш спрайт
            spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
            spriteBatch.Draw(myTexture, spritePosition, Color.White);
            spriteBatch.End();

            base.Draw(gameTime);
        }


После этого можно запустить проект, и мы увидим нарисованный в левом верхнем углу объект (спрайт). Но мы то хотим чтобы он двигался!

Чтобы наш спрайт начал двигаться меняем Update и добавляем процедуру UpdateSprite:
// Параметр - устанавливает координаты отображения нашего спрайта.
Vector2 spritePosition = Vector2.Zero;

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // Рисуем наш спрайт
            spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
            spriteBatch.Draw(myTexture, spritePosition, Color.White);
            spriteBatch.End();

            base.Draw(gameTime);
        }

//Процедура движения нашего спрайта...
void UpdateSprite(GameTime gameTime)
        {
            // Перемещаем наш спрайт со скоростью, зависящей от времени.
            spritePosition +=
                spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;

            int MaxX =
                graphics.GraphicsDevice.Viewport.Width - myTexture.Width;
            int MinX = 0;
            int MaxY =
                graphics.GraphicsDevice.Viewport.Height - myTexture.Height;
            int MinY = 0;

            // Проверяем на достижение граних игрового пространства.
            if (spritePosition.X > MaxX)
            {
                spriteSpeed.X *= -1;
                spritePosition.X = MaxX;
            }

            else if (spritePosition.X < MinX)
            {
                spriteSpeed.X *= -1;
                spritePosition.X = MinX;
            }

            if (spritePosition.Y > MaxY)
            {
                spriteSpeed.Y *= -1;
                spritePosition.Y = MaxY;
            }

            else if (spritePosition.Y < MinY)
            {
                spriteSpeed.Y *= -1;
                spritePosition.Y = MinY;
            }
        }


Теперь мы можем запустить наш проект и полюбоваться на то как наш спрайт движется по игровому пространству. (в моём случае это маленькое, но симпатишное привидение).


На этом первая часть заканчивается, во второй части будет создан игровой персонаж, которым мы будем управлять и спасать от привидения.

Скачать исходник примера можно здесь: MyFirstXNA_Game.rar

XNA Game Studio C шарп игры программирование

Оставить первый комментарий: