|
Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить..... |
2D-графика в XNA Game Studio 2.0.
Разработка класса для хранения графической информации
Создадим новый стандартный проект с именем P2_2. Добавим в проект изображение, которое мы создали выше (6.1).
Теперь подумаем, каким должен быть класс для представления игрового объекта. Сейчас нам нужен класс, объект которого сможет хранить текстуру спрайта и информацию о его позиции на экране. При необходимости этот список можно расширить – причем – как свойствами – так и методами. Но над подобным проектом мы будем работать на одном из следующих занятий. Ограничимся пока двумя вышеназванными свойствами.
Щелкнем по значку проекта P2_2 в панели Solution Explorer и выберем в появившемся меню пункт Add
Class. Появится окно добавления нового элемента, в котором будет выделен шаблон пустого класса (рис. 6.6.).
Зададим имя новому классу – пусть это будет spriteClass, и нажмем кнопку Add. В проект будет добавлен новый пустой класс. Вот как выглядит наш проект после всех перечисленных действий (рис. 6.7.).
Модифицируем код класса spriteClass следующим образом.
Во-первых, в раздел подключения пространств имен добавим директивы using, содержащие те пространства имен, которые содержат объявления типов данных, необходимых для хранения текстуры и ее позиции.
Во-вторых – создадим необходимые свойства класса.
В-третьих – построим конструктор класса, который будет инициализировать эти свойства.
Вот как выглядит код класса после всех модификаций (листинг 6.4.):
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
namespace P2_2
{
class spriteClass
{
public Texture2D spTexture;
public Vector2 spPosition;
public spriteClass(Texture2D newSpTexture, Vector2 newSpPosition)
{
spTexture = newSpTexture;
spPosition = newSpPosition;
}
}
}
Листинг
6.4.
Код класса spriteClass
Здесь мы подключили к нашему классу пространство имен Microsoft.Xna.Framework.Graphics – оно нужно нам, так как содержит объявление типа данных Texture2D. Пространство имен Microsoft.Xna.Framework содержит объявление типа данных Vector2.
В раздел объявления свойств класса мы добавили две переменные. Переменная spTexture типа Texture2D используется для хранения текстуры, переменная spPosition типа Vector2 – для хранения данных о положении объекта на экране. В конструкторе класса мы инициализируем эти переменные значениями соответствующих типов, переданными при создании объекта типа spriteClass в основном тексте программы.
Теперь внесем изменения в основной текст игры, который расположен в файле Game1.cs. В листинге 6.5. приведены эти изменения с комментариями, указывающими на их местонахождение.
/// Объект mySpriteObj для хранения данных об изображении для вывода на экран
spriteClass mySpriteObj;
/// Добавляем в метод LoadContent команду создания нового объекта типа spriteClass.
Передаем в качестве текстуры изображения текстуру, загруженную с помощью команды Content.Load,
в качестве позиции – новый объект типа Vector2
mySpriteObj = new spriteClass(Content.Load<Texture2D>("P2_1"), new Vector2(100f, 150f));
/// В метод Draw добавляем соответствующие вызовы методов объекта spriteBatch.
Обратите внимание на то, что при вызове метода Draw мы пользуемся свойствами объекта mySpriteObj.
spriteBatch.Begin();
spriteBatch.Draw(mySpriteObj.spTexture, mySpriteObj.spPosition, Color.White);
spriteBatch.End();
/// В метод UnloadContent добавляем команды для освобождения системных ресурсов.
mySpriteObj.spTexture.Dispose();
spriteBatch.Dispose();
Листинг
6.5.
Изменения, внесенные в код файла Game1.cs
Как видите, если сравнить предыдущий подход с хранением всех данных о выводимом изображении в классе Game1 и подход с хранением этих же данных в специально разработанном классе, можно заметить, что выделение отдельного класса для спрайта позволяет удобно организовывать все необходимые свойства и методы для работы с объектом.
Однако, и этот подход не является единственно возможным. Еще более интересный способ вывода изображений и создания игровых объектов – это создание игровых объектов на базе игровых компонентов.

