Спонсор: Microsoft
Санкт-Петербургский государственный политехнический университет
Опубликован: 09.12.2013 | Доступ: свободный | Студентов: 2056 / 30 | Длительность: 06:23:00
Специальности: Программист
Самостоятельная работа 1:

Практика. Перемещение объектов в 2D пространстве

< Лекция 1 || Самостоятельная работа 1: 123

SpriteBatch

Основным объектом для работы с 2D графикой является SpriteBatch, более подробно работа со SpriteBatch будет рассмотрена в следующих практических занятиях, в рамках данного занятия необходимо знать лишь основные особенности работы со SpriteBatch.

Вся работа по отображению изображений на экран осуществляется в рамках блоков SpriteBatch.Begin – SpriteBatch.End. Для собственно отображения изображений на экран нужно использовать метод SpriteBatch.Draw. Существуют большое количество перегруженных вариантов вызова данного метода, однако в рамках данной работы будет рассмотрен наиболее простой.

public void Draw (
 Texture2D texture,
 Vector2 position,
 Color color
)

texture – изображение, которое необходимо нарисовать на экране.

position – позиция левого верхнего угла изображения на экране.

color – цвет, используемый для смешивания перед выводом изображения на экран. Чаще всего, этот параметр будет принимать значение Color.White. В таком случае изображение будет иметь цвета, которые были заданы при создании изображения. Вы можете самостоятельно поэксперементировать с данным параметром.

Загрузка содержимого (контента) игры

Перед тем как работать с изображениями (или другими типами игрового содержимого: моделями, звуками, шрифтами и т.д.) необходимо загрузить их в игру при помощи ContentManager.

Для загрузки игрового содержимого в каркасе приложения предусмотрен специальный метод LoadContent.

Загрузка определенного типа содержимого осуществляется вызовом метода Content.Load<ТипСодержимого>("НазваниеФайлаСодержимого").

Например, работы с друмерными изображениями в XNA Frawework используется класс Texture2D.

sprite = Content.Load<Texture2D>("filename");

Объект Texture2D содержит различные свойства, которые пригодятся нам для реализации данной работы.

В частности, Width и Height возращают значения ширины и высоты исходного изображения.

Игровое время

Теперь вспомним основы работы с игровым временем в XNA Framework. Методы Update и Draw получают в качестве параметра единственный объект GameTime, который отвечает за игровое время.

Рассмотрим основые свойства объекта GameTime:

ElapsedGameTime Игровое время, прошедшее с предыдущего вызова метода Draw/Update
ElapsedRealTime Реальное время, прошедшее с предыдущего вызова метода Draw/Update
IsRunningSlowly Если это свойство имеет значение true, то время, проходящее между последовательными вызовами метода Update/Draw больше значения, указанного в TargetElapsedTime. Это означает, что игра работает медленнее, чем требуется. Если IsRunningSlowly равняется true, то стоит задуматься над оптимизацией
TotalGameTime Игровое время, прошедшее с запуска игры
TotalRealTime Реальное время, прошедшее с запуска игры

Для нас наиболее важными свойствами являются ElapsedGameTime и TotalGameTime. Они возвращают объект типа TimeSpan, который имеет множество различных свойств. Рассмотрим лишь наиболее важные:

Days Целое количество дней
Hours Целое количество часов
Milliseconds Целое количество миллисекунд
Minutes Целое количество минут
Seconds Целое количество секунд
Ticks Целое количество системных "тиков"
TotalDays Вещественное значение дней
TotalHours Вещественное значение часов
TotalMilliseconds Вещественное значение миллисекунд
TotalMinutes Вещественное значение минут
TotalSeconds Вещественное значение секунд

Обратите внимание на то, что свойства, название которых не начинается с Total, возвращают целое число, то есть, например, Days будет иметь значение 0 до тех пор, пока не пройдет целый день. В то же время значение TotalDays будет постоянно увеличиваться и по прошествие дня примет значение 1.

< Лекция 1 || Самостоятельная работа 1: 123
Сергей Попов
Сергей Попов

Компелятор говорит что у StorageContainer нет свойства TotalStorage, как решить эту проблему ?

ost dem
ost dem

не работает 

        AudioEngine engine;
        WaveBank waveBank;
        SoundBank soundBank;

пишет

Ошибка    2    Не удалось найти имя типа или пространства имен "AudioEngine" (пропущена директива using или ссылка на сборку?)    

 

так же не работает

using Microsoft.Xna.Framework.Xact;

пишет 

Ошибка    1    Имя типа или пространства имен "Xact" отсутствует в пространстве имен "Microsoft.Xna.Framework" (пропущена ссылка на сборку?)   

как это исправить?