Шаг 6: Прочие объекты, уровни масштабирования и декорации

На этом шаге мы закончим черновую работу над нашей сценой.

 

Свободные объекты (free entities)

Давайте ещё раз бросим взгляд на нашу сцену: стул всё ещё не выглядит должным образом. Он как будто нарисован на полу. Сейчас мы исправим это. Мы уже проделывали подобную процедуру ранее со столом на шагах 2 и 3. Мы создали объект «desk» и специальный регион, так что стол теперь перекрывает персонажа, когда это необходимо. Использование регионов - очень гибкая технология, она применима для больших объектов и для объектов, имеющих неровную форму. Но для небольших элементов будет более простым способом конвертировать их в «свободные объекты» («free entities»). Мы проделаем это над объектом «стул».

Итак, что же такое «свободные объекты»? Мы уже использовали стандратные объекты до этого; фон и стол - это объекты, но они привязаны к самой сцене. А свободные объекты, как и персонажи, отрисовываются в зависимости от того, где они размещены на сцене (другими словами, в каком регионе они находятся). Эти слова поначалу могут смутить, но далее мы рассмотрим, как это на самом деле работает.

Теперь давайте создадим объект «стул». Первое, что нам нужно сделать - это подготовить для него изображение. У нас уже имеется для этого готовая картинка. Переключитесь в окно программы ProjectMan, сделайте правый щелчок мышью на папке «MyScene» и выберите команду «Импортировать->Импортировать файл(ы)» («Import->Import file(s)…»). Перейдите в папку «data\tutorial\gfx» и выберите файл «chair.bmp». Картинка скопируется в папку нашей сцены.

Вернитесь в окно программы SceneEdit. В списке выберите слой «Свободные объекты» («Free entities»). Список узлов изменит своё содержимое, отображая все свободные объекты. В данный момент он пуст. Нажмите кнопку «Добавить объект» («Add entity») и выберите «Добавить спрайт» («Add sprite entity»). Будет создан «новый объект» («new entity»). Назовите его «chair» («стул»). Вы также можете изменить его заголовок (caption) на «chair», мы будем использовать его в дальнейшем.

 

Теперь нам нужно изменить графическое представление объекта. Нажмите кнопку «…» рядом со свойством «Спрайт» («Sprite») и откройте файл «chair.bmp», который импортировали ранее. Поместите рисунок на сцену так, чтобы он закрывал изображение стула на фоновой картинке:

 

Сохраните сцену и запустите игру. Ой, что-то не так - изображение персонажа всё ещё перекрывает собой стул. Что происходит? Дело в том, что когда несколько свободных объектов (предметов интерьера или персонажей) находятся в одном регионе, WME определяет порядок их отрисовки в зависимости от значения Y-координаты позиции каждого объекта на экране. Позиция персонажа определяется по координатам его стоп. Но базовая точка стула - это координата верхнего левого угла его изображения. Вы ожидали, что она находится там, где стул соприкасается с полом, так? Как нам добиться этого? Вместо простой BMP-картинки мы будем использовать спрайт. «Спрайт» в WME - это сложное (составное) изображение. Это может быть статичное изображение или же анимация, плюс к этому Вы можете задавать некоторые дополнительные свойства этого изображения (прочтите раздел о спрайтах). Одно из этих дополнительных свойств - это «горячая точка» («hot spot»). Это базовая точка спрайта. Как раз то, что нам нужно.

Теперь нам нужно создать спрайт стула. Вернитесь в окно программы ProjectMan. Сделайте правый щелчок мышью на папке «MyScene» и выберите команду «Добавить->Добавить спрайт…» («Add->Add sprite…»). В окне выбора шаблона, укажите «Пустой спрайт» («Empty sprite»); в поле для ввода названия введите «chair» и нажмите OK.

 

В папке будет создан новый файл спрайта «MyScene», который будет называться «chair.sprite». Сделайте двойной щелчок на этом файле и ProjectMan запустит приложение SpriteEdit. В данный момент спрайт пуст. Мы добавим один кадр с изображением стула. Нажмите кнопку «Добавить кадр(ы)» («Add frame(s)») и выберите файл «chair.bmp».

 

Теперь нам нужно задать горячую точку. Это можно сделать двумя способами: либо перетаскивая изображение стула с помощью мыши, либо ввести координаты горячей точки в окне «Свойства кадра» («Frame properties») (горячая точка обозначена красным крестиком в окне отображения спрайта).

Установите координаты горячей точки 135, 174.

 

Сохраните спрайт и закройте программу SpriteEdit. Вернитесь в окно программы SceneEdit. В окне свойств объекта «chair» нажмите кнопку «…» рядом со свойством «Спрайт» («Sprite») и выберите файл «chair.sprite». Вы заметите, что стул передвинется, т. к. его базовая точка изменится. Верните изображение на его место. Вот и всё! Сохраните сцену и запустите игру.

Теперь отрисовка работает так, как ожидается. Если персонаж стоит позади стула, то он закрывается им и наоборот.

   

 

Всё, что нам осталось сделать, это запретить персонажу ходить сквозь стул. Мы добавим непроходимую область и несколько точек нахождения пути.

Добавьте непроходимый регион («block_chair») и 4 точки нахождения пути. Вы уже должны уметь делать это. Этот процесс описан на шагах 4 и 5. Вы должны получить результаты, подобные изображённым ниже:

 

Уровни масштабирования

Поведение объектов сцены выглядит отлично, но персонаж смотрится несколько великоватым для дальней части комнаты. Мы можем исправить это с помощью так называемых уровней масштабирования. Они представлены яркими зелёными линиями в программе SceneEdit. Идея в следующем: Вы задаёте значение масштаба для конкретных уровней сцены и затем персонаж автоматически вычисляет свой размер в соответствии с его текущими координатами.

В нашей сцене уже имеются два уровня масштабирования (и Вам редко когда понадобится большее их количество). Вы можете перемещать уровень мышью, «удерживая» левый край зелёной линии. Также Вы можете удалить уровень или изменить его свойства, сделав правый щелчок мышью на левом конце линии.

 

Если Вам нужно добавить ещё один уровень, нажмите кнопку «Добавить уровень масштабирования» («Add scale level»).

 

Итак, довольно теории, давайте зададим уровни масштабирвоания для нашей сцены. Переместите верхний уровень в самую верхнюю часть пола и задайте ему значение 90%.

Затем переместите другой уровень в нижнюю часть пола и задайте значение 160%.

 

Вы, наверное, задаётесь вопросом, как вычислить правильное значение уровня масштабирования? Лучшим способом сделать это будет использование инструмента размещения персонажа. SceneEdit позволяет Вам разместить персонаж внутри разрабатываемой сцены, чтобы посмотреть, как работает структура сцены и уровни масштабирования. Вам не нужно будет каждый раз запускать игру, чтобы протестировать результаты Ваших усилий! Вы найдёте команду «Разместить персонаж» («Place actor») на панели инструментов или в главном меню («Персонаж->Разместить персонаж» («Actor->Place actor»)).

 

Нажмите кнопку и приложение SceneEdit попросит указать файл, из которого оно должно будет загрузить персонаж. Откройте папку «data\actors\molly» и выберите файл «molly.actor». После того, как персонаж будет загружен, Вы сможете перемещать его по сцене с помощью мыши. Если Вы нажмёте правую кнопку мыши, то направление персонажа (куда он смотрит) изменится. Нажав левую кнопку мыши, Вы поместите его на сцену. Если Вам позднее понадобится изменить его координаты, просто нажмите ещё раз кнопку «Разместить персонаж».

Следует отметить, что инструмент размещения персонажа применяется только для тестирования; он не оказывает влияния на сцену.

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

 

Области декораций

Основная композиция нашей сцены закончена. Теперь мы немного приукрасим её. Давайте сделаем так, чтобы персонаж становился немного темнее, когда он стоит в дальнем углы комнаты.

Мы можем добавить специальный регион, чтобы влиять на цвет и масштаб персонажа. Такие регионы называются «области декораций» (вспомните, что нам уже известны два других типа регионов: общий структурный регион и непроходимая область).

Область декораций добавляется точно так же, как и другие регионы: нужно нажать кнопку «Добавить регион» (убедитесь, что Вы выбрали при этом главный слой «main»).

 

Нажмите кнопку и новый регион будет создан. Задайте ему название «shade» и измените значение радио-переключателя с «Layout» на «Decoration». Взгляните на окно «Свойства региона» («Region properties»), в нём Вы увидите выпадающий список «Цвет» («Color»). Используйте его для задания цвета региона. Когда персонаж находится в области декораций, его цвет будет смешиваться с цветом этой области. Задайте для неё светло-серый цвет.

 

Заметьте, что Вы также можете задавать значение масштаба для области декораций. Оно переопределит значение, заданное уровнем масштабирования.

Внимание: изменение цвета работает только при следующих условиях

1)   игра работает в режиме графического ускорения; в режиме совместимости этот эффект будет отключён
2)   значение свойства «Colorable» объекта должно быть установлено в «true»

Теперь правильно разместите регион и задайте ему нужную форму:

 

Внимание: область декораций не влияет на отрисовку сцены. Но персонаж изменит свой цвет в соответствии с самым верхним регионом (который отрисовывается поверх всех). Таким образом, область декораций должна быть помещена в самый конец списка узлов в программе SceneEdit.

Вы можете проверить результат непосредственно в программе SceneEdit с помощью инструмента размещения персонажа, описанного выше.

Сохраните сцену и закройте SceneEdit. Запустите игру и проверьте результаты сделанного на этом шаге. Персонаж должен иметь правильный размер, обходить стул и становиться темнее, когда находится в дальнем углу комнаты.

Теперь наша сцена выглядит отлично; мы добавим немного интерактивности на Шаге 7: Регионы, курсоры, сценарии.