
- •Содержание
- •Создание html5игр Введение
- •1.1 Преимущества html5
- •1.2 Работа с медиа элементами
- •1.3 Работа с графическими элементами
- •1.4 Ход работы
- •Варианты заданий
- •Вопросы для самоконтроля
- •Источники
- •Создание уровней игры с помощью udk Введение
- •2.1 Построение геометрии
- •2.2 Наложение текстур
- •2.3 Модель освещения
- •2.4 Статические объекты в udk
- •Варианты заданий
- •Вопросы для самоконтроля
- •3. Создание скриптов на основе udk
- •3.1 Общий обзор Kismet
- •3.2 Написание простейшего мувера
- •3.3 Создание логики ии
- •Варианты заданий
- •4.2 Настройка камеры в xna
- •4.3 Загрузка модели в игру
- •Варианты заданий
- •Вопросы для самоконтроля
- •Источники
Варианты заданий
Добавить в созданную ранее карту – муверы, пути для ботов.
Вопросы для самоконтроля
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), но тогда вы «привяжете» себя к конкретному размеру дисплея.