3.Рисуем первую плоскую картинку:
Под словом “плоскую”, я
подразумеваю 2D.
Всем советую не прененебрегать этим
разделом, так как 2D графика является неотъемлемой частью всех игр. Это и меню,
и вывод количества всевозможных параметров на экран, таких как жизни, пули,
очки, не говоря уже о таком самодостаточном направлении в игровой индустрии, как 2D игры. Да к тому - же появятся
базовые навыки работы в XNA. Итак, для
этого нам понадобится картинка, а в дальнейшем текстура (ибо пора привыкать к
терминологии), которую мы попытаемся вывести на экран монитора. Создадим новый
проект и назовем его myFirstAplication. Как создаются проекты в XNA описано
в предидущем посте. Теперь нам надо добавить саму
текстуру к нашему проекту, и делается это нажатием правой кнопкой мыши на папке
Content, которая находится в проекте. В появившемся выпадающем меню выберем добавить папку, и назовем ее
textures. Делается это для удобства работы в дальнейшем. Мы как бы сортируем
файлы по типу, потому – что, в играх используется большое количество различных
файлов. В принципе, никто не запрещает свалить их в одну папку, если их
количество не велико, но если их число перевалит за сотню, то будет очень
нелегко разобраться во всем этом богатстве. А если к тому - же учесть, что в
разработке игры принимают участие несколько человек, то такое отношение к делу
будет напрасно отнимать драгоценное время на поиски интересующего файла. По -
этому будем следить за порядком в проекте с самого начала, к счастью в XNA есть
такая возможность. Важно отметить, что названия папок и файлов должны быть написаны
английскими буквами, потому - что XNA 3.1 пока не поддерживает русский текст.
После добавления текстуры, решение будет выглядеть
так:
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;
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 class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D myTexture;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
{
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");
}
{
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);
{
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);
{
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.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);
}
}
Комментариев нет:
Отправить комментарий