Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Game Design.docx
Скачиваний:
26
Добавлен:
13.04.2015
Размер:
10.72 Mб
Скачать

Варианты заданий

Добавить в созданную ранее карту – муверы, пути для ботов.

Вопросы для самоконтроля

1. Что такое Kismet?

2. Для чего Kismet используется?

3. Что такое окно Kismet.

4. Какие основные формы Kismet?

5. Назовите основные цвета Kismet и их соответствия.

6. Что такое мувер? Где может использоваться?

7. Назовите шаги простой последовательности.

8. Назовите основных актеров?

Источники

4. Создание XNA-игр

Disclaimer

При изучении этого раздела, считается, что студент имеет следующие знания:

- работа с матрицами;

- конвейер графических преобразований;

- понятие шейдеров;

- написание 2D-игр в XNA;

4.1 Матрицы в XNA

Мировая матрица – позволяет производить различные матричные преобразования (трансформацию, масштабирование) объекта в мировой системе координат.

Матрица вида – задает местоположение камеры в пространстве, это вторая по счету матрица, на которую умножаются вершины объекта. Эта матрица способствует определению направления просмотра трехмерной сцены.

Матрица проекции – это более сложная матрица, которая создает проекцию трехмерного объекта на плоскость двумерного экрана монитора. С помощью этой матрицы определяются передняя и задняя области отсечения трехмерного пространства, что позволяет регулировать пространство отсечения невидимых на экране объектов, а заодно и снизить нагрузку процессора видеокарты.

4.2 Настройка камеры в xna

Начнем с того, что в области глобальных переменных класса Game1 объявим три матрицы:

Matrix world;

Matrix view;

Matrix proj;

Как видно из названий матриц, это те самые три матрицы (мировая, видовая и проекционная), используемые для представления объектов в трехмерном пространстве. Дополнительно структура Matrix в XNA Framework имеет большой набор встроенных методов, с помощью которых можно выполнить любые матричные преобразования.

Далее в области глобальных переменных класса Game1 создаются четыре новые переменные.

static float aspectRatio;

static float FOV = MathHelper.PiOver4;

static float nearClip = 1.0f;

static float farClip = 1000.0f;

Все четыре переменные принимают участие в матричных расчетах, и это часть давно отлаженного механизма, передающегося по наследству от старых версий DirectX. Первая переменная aspectRatio в исходном коде представляет так называемый коэффициент сжатия, на базе которого ведется расчет перспективы модели для правильного соотношения геометрических размеров в пространстве.

Следующая переменная FOV призвана определять поле зрения. Здесь типичное значение равно MathHelper.PiOver4. Две оставшиеся переменные nearClip и farClip позволяют задать соответственно переднюю и заднюю области отсечения и участвуют в проекционных расчетах.

Затем в исходном коде у нас следует объявление объекта model класса Model.

private Model model;

private Vector3 positionModel

Переменная positionModel необходима для выбора позиции модели на экране. В конструкторе класса Game мы задаем позицию модели в пространстве нулевыми значениями.

positionModel = new Vector3(0, 0, 0);

Нулевые значения для позиции модели при нахождении камеры в центре экрана устанавливают модель четко в центр экрана.

Используя в исходном коде три ранее созданные матрицы (мировую, видовую и проекционную), мы создадим для объекта свою локальную систему координат.

После этих действий все свои установки объектов на позиции в трехмерном мире вам придется вести относительно локальной системы координат объекта и позиции камеры. Если камера стоит в центре экрана (X = 0 и Y = 0, по оси Z камера либо приближается, либо удаляется от центра экрана) и у объекта нулевые координаты, то местоположение объекта всегда будет точно в центре монитора.

Переходим в тело метода Initialize(). Здесь появляется новая запись, которая инициализирует переменную aspectRatio значением, равным делению половины ширины экрана на половину высоты экрана.

aspectRatio = (float)screenWidth / (float)screenHeight;

Эта стандартная запись, но ранее до метода Initialize() мы не могли использовать такую запись, поскольку лишь в этом методе несколькими строками выше определили свойства видеоадаптера, установленного в системе. Если использовать эту запись прежде, до определения настроек адаптера, то переменная aspectRatio получит системное значение, равное по умолчанию размеру 800/600 пикселей, и тогда ваш коэффициент сжатия будет некорректным.

Значение этой переменной можно также определять и числовыми значениями (например, 1024/768), но тогда вы «привяжете» себя к конкретному размеру дисплея.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]