понедельник, 5 марта 2012 г.

Практическое применение XNA. Часть 2


3.Рисуем первую плоскую картинку:

Под словом “плоскую”, я подразумеваю 2D. Всем советую не прененебрегать  этим разделом, так как 2D графика является неотъемлемой частью всех игр. Это и меню, и вывод количества всевозможных параметров на экран, таких как жизни, пули, очки, не говоря уже о таком самодостаточном  направлении в игровой индустрии, как 2D игры. Да к тому - же появятся базовые навыки работы в XNA.  Итак, для этого нам понадобится картинка, а в дальнейшем текстура (ибо пора привыкать к терминологии), которую мы попытаемся вывести на экран монитора. Создадим новый проект и назовем его myFirstAplication. Как создаются проекты в XNA описано в предидущем посте.     Теперь нам надо добавить саму текстуру к нашему проекту, и делается это нажатием правой кнопкой мыши на папке Content, которая находится в проекте. В появившемся выпадающем меню выберем добавить папку, и назовем ее textures. Делается это для удобства работы в дальнейшем. Мы как бы сортируем файлы по типу, потому – что, в играх используется большое количество различных файлов. В принципе, никто не запрещает свалить их в одну папку, если их количество не велико, но если их число перевалит за сотню, то будет очень нелегко разобраться во всем этом богатстве. А если к тому - же учесть, что в разработке игры принимают участие несколько человек, то такое отношение к делу будет напрасно отнимать драгоценное время на поиски интересующего файла. По - этому будем следить за порядком в проекте с самого начала, к счастью в XNA есть такая возможность. Важно отметить, что названия папок и файлов должны быть написаны английскими буквами, потому - что XNA 3.1 пока не поддерживает русский текст.
После добавления папки, нам надо в нее добавить нашу текстуру. Воспользуемся тем же способом, что и при создании папки, только теперь в выпадающем меню выберем добавить существующий элемент. В появившемся диалоговом окне находим необходимый файл (файлы), и жмем кнопку (добавить). Хотя есть и другие способы добавления файлов в проект. Например, с помощью горячих клавиш Ctrl + C (скопировать) и Ctrl + V (вставить). При этом нужный файл захватывается в буфер непосредственно из файловой системы, а вставляется прямо в обозревателе решений, в целевую папку. А еще принцип (Drag аnd Drop), позволяет перемещать файлы внутри решения.


После добавления текстуры, решение будет выглядеть так:

Теперь нам предстоит отобразить текстуру на весь экран. Код, который позволяет нам это сделать выглядит так:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace myFirstAplication
{
  public class Game1 : Microsoft.Xna.Framework.Game
  {
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Texture2D myTexture;
    public Game1()
    {
      graphics = new GraphicsDeviceManager(this);
      Content.RootDirectory = "Content";
    }
    protected override void Initialize()
    {
      base.Initialize();
    }
    protected override void LoadContent()
    {
      spriteBatch = new SpriteBatch(GraphicsDevice);
      myTexture = Content.Load<Texture2D>(@"textures/Hello World");
    }
    protected override void UnloadContent()
    {
    }
    protected override void Update(GameTime gameTime)
    {
      base.Update(gameTime);
    }
    protected override void Draw(GameTime gameTime)
    {
      GraphicsDevice.Clear(Color.CornflowerBlue);
      spriteBatch.Begin();
      spriteBatch.Draw(myTexture, new Rectangle(0, 0, 800, 600), Color.White);
      spriteBatch.End();
      base.Draw(gameTime);
    }
  }
}
Мы создали экземпляр класса Texture2D с именем myTexture, затем загрузили в него нашу текстуру, в методе LoadContent. И с помощью вспомогательного класса SpriteBatch, передали ее первым параметром для рисования. Вторым параметром передали квадрат, который определил зону рисования нашей текстуры, с размерами сторон равными нашему графическому окну, и третьим параметром подкраски был передан белый цвет, который не внес изменения в нашу цветовую гамму текстуры.
Ниже показан код с небольшими вариациями, и результат изменений. Если поэкспериментировать с цветами, то на базе одной текстуры можно получить множество различных вариантов отображения.
    protected override void Draw(GameTime gameTime)
    {
      GraphicsDevice.Clear(Color.CornflowerBlue);
      spriteBatch.Begin();
      spriteBatch.Draw(myTexture, new Rectangle(0, 0, 200, 200), Color.White);
      spriteBatch.Draw(myTexture, new Rectangle(0, 200, 200, 200), Color.Red);
      spriteBatch.Draw(myTexture, new Rectangle(200, 0, 200, 200), Color.RoyalBlue);
      spriteBatch.Draw(myTexture, new Rectangle(200, 200, 200, 200), Color.Purple);
      spriteBatch.Draw(myTexture, new Rectangle(0, 400, 200, 200), Color.Goldenrod);
      spriteBatch.Draw(myTexture, new Rectangle(400, 0, 200, 200), Color.Green);
      spriteBatch.Draw(myTexture, new Rectangle(200, 400, 200, 200), Color.Brown);
      spriteBatch.Draw(myTexture, new Rectangle(400, 200, 200, 200), Color.IndianRed);
      spriteBatch.Draw(myTexture, new Rectangle(400, 400, 200, 200), Color.Lavender);
      spriteBatch.Draw(myTexture, new Rectangle(600, 0, 200, 200), Color.HotPink);
      spriteBatch.Draw(myTexture, new Rectangle(600, 200, 200, 200), Color.Yellow);
      spriteBatch.Draw(myTexture, new Rectangle(600, 400, 200, 200), Color.Turquoise);
      spriteBatch.End();
      base.Draw(gameTime);
    }

Поздравляю. Теперь вы умеете рисовать 2D картинки с помощью XNA.

Комментариев нет:

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

Physically Based Rendering