Anthill Game Framework

Tiny framework for creating Flash games.

Инструменты пользователя

Инструменты сайта


extensions:living_lights

Living Lights

Название Living Lights (Живые Огоньки)
Автор Anton Karlov
Тип extension
Версия 0.1
Версия Anthill 0.3.0 или выше

Примечание: Прежде чем использовать данное расширение, ознакомьтесь с разделом «Установка».


Описание

Данное дополнение позволяет создавать реалистичные источники света в 2D играх.

Для просмотра этого содержимого требуется Adobe Flash Plugin.

Дополнение состоит из двух классов:

  • AntLightEnvironment (световое окружение) — используется как менеджер для источников света и для объектов, которые отбрасывают тени. Данный класс унаследован от класса AntEntity и немного расширяет его возможности для реализации света. Объекты, добавляемые в окружение света, не обрабатываются и не отрисовываются, поэтому объекты должны быть добавлены в структуру Anthill отдельно.
  • AntLight (источник света) — представляет простой источник света. Данный класс так же унаследован от AntEntity, но для корректного расчета источники света следует добавлять только в AntLightEnvironment.

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

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

Несколько динамических источников света без оптимальных настроек могут снизить производительность игры до минимума. В качестве оптимизации расчетов для источников света можно использовать параметры angleStep и rayStep. Увеличение значений angleStep и rayStep может существенно снизить нагрузку при расчете источников света, но при этом страдает качество и точность расчетов, поэтому к настройке источников света следует подходить внимательно.

Внимание: В версии 0.1 существует недоработка: статические источники света, находящиеся за пределами экрана в момент их расчета — рассчитываются некорректно. Данный недостаток планируется устранить в последующих версиях.


Установка

Чтобы установить данное расширение, следуйте следующим шагам:

  1. Скачайте расширение «Living Lights» по ссылке, представленной выше.
  2. Распакуйте содержимое архива LivingLights.zip в удобное для вас место.
  3. Скопируйте содержимое папки extensions в папку src/ru/antkarlov/anthill/extensions/
  4. Установка завершена! Теперь вы можете перейти к разделу Использование.

Чтобы скомпилировать примеры для данного расширения, следуйте следующим шагам:

  1. Скачайте примеры «Living Lights» по ссылке, представленной выше.
  2. Распакуйте содержимое архива LivingLightsExamples.zip в удобное для вас место.
  3. Скопируйте в папку примеров src исходники Anthill (скачать Anthill).
  4. Скачайте расширение «Living Lights» по ссылке, представленной выше.
  5. Скопируйте содержимое папки extensions из архива LivingLights.zip в папку src/ru/antkarlov/anthill/extensions/
  6. Теперь вы можете выполнить компиляцию примеров и поэкспериментировать с кодом!

Если у вас возникли какие-либо проблемы с установкой расширения, напишите об этом автору.


Использование

Данное расширение очень просто использовать. Пример использования:

// Импортируем расширение в наш класс
import ru.antkarlov.anthill.extensions.livinglights.*;

// Создаем обычного актера и добавляем его в структуру.
var actor:AntActor = new AntActor();
actor.addAnimationFromCache("Tree");
add(actor);

// Создаем световое окружение и добавляем его в структуру.
var environment:AntLightEnvironment = new AntLightEnvironment();
add(environment);

// Создаем источник света
var light:AntLight = new AntLight();
light.radius = 150;

// Добавляем источник света в световое окружение
environment.addLight(light);

// Добавляем актера в световое окружение, чтобы он отбрасывал тень
environment.add(actor);

Код настолько простой, что в дополнительных комментариях не нуждается.

Каждый новый созданный источник света по умолчанию является живым, что заставляет его перерассчитываться постоянно. Если вы создаете статический источник света, который не должен двигаться, то для существенной оптимизации следует установить его свойство:

light.live = false;

Для «живых» источников света, которые двигаются очень мало или медленно, может быть полезным установка свойства updateInterval отличным от 0. Данное свойство заставляет перерассчитывать источник света через заданный промежуток времени, что может позволить сильно сэкономить производительность для малоподвижных динамических источников света.

Также при создании динамических источников света обязательно поиграйтесь с параметрами angleStep и rayStep.

  • angleStep — определяет круговой шаг для пересчета источника света. Чем больше шаг, тем быстрее выполняется расчет, так как пропускается заданное количество пикселей при расчете очередного луча. Но при этом и качество падающего света страдает: свет может частично срезать (перекрывать) объекты, отбрасывающие тень.
  • rayStep — определяет лучевой шаг для пересчета источника света. Как и в случае с angleStep, чем больше шаг, тем быстрее выполняется расчет света. Но и качество падающего света тоже страдает, свет может заходить вглубь объектов, отбрасывающих тень.

Не точные расчеты при больших значениях angleStep и rayStep очень хорошо скрывает применение сглаживания для света.


Направление света

При создании источника света вы можете задать не только радиус света, но и направление света, определив минимальный и максимальный угол свечения:

light.lowerAngle = -45;
light.upperAngle = 45;

Задав минимальный и максимальный угол света, мы можем получить направленный источник света в определенную сторону. Далее, если менять для такого источника света angle — он будет вращаться. Таким образом можно создавать фонарики, свет от фар и т.п.

Примечание: Кстати, если вы используете направленные источники света, то на экране может быть в несколько раз больше источников света без особой потери в производительности. Например, четыре источника света, каждый из которых светит только на 90 градусов, будут занимать столько же расчетов, как один круговой источник света.


Насыщенность и цвет света

Изменяя свойство ratio от 0 до 255, можно изменять насыщенность светового пятна. По умолчанию ratio == 100.

Также вы можете задать цвет горения и цвет затухания — заданные цвета используются для рисования переходящего градиента.

  • colorIn — определяет начальный цвет источника света.
  • colorOut — определяет цвет затухания источника света.

Сглаживание

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

Для увеличения производительности вы можете отключить сглаживание следующим образом:

light.blur = new AntPoint(0, 0);

Или задать произвольное сглаживание:

light.blur = new AntPoint(20, 20);

По умолчанию сглаживание (10,10).


История изменений

Версия 0.1 от 26 Апреля 2013

  • Первая публичная версия.

Планы по развитию

  • Решить проблему, из-за которой статические источники, находящиеся за пределами экрана, рассчитываются не корректно.

extensions/living_lights.txt · Последние изменения: 16.06.2013 13:33 — Artyom Kohver