Страницы

четверг, 23 августа 2012 г.

Bombermen на Java: team-colors

Сделал простой, но рабочий BufferedImageOp фильтр, перекрашивающий спрайты Bomberman-а.
Создание фильтра я буду иллюстрировать примерами из своих наработок и игры Battle for Wesnoth:
  1. Выбор ключевой палитры цветов (эти цвета подлежат замене на цвета игрока). В Battle for Wesnoth это оттенки magenta:

    У меня спрайты очень простые, потому в палитре всего 2 цвета:
  2. Выбор уникальной палитры цветов для каждого игрока (этими которыми будут заменятся цвета из ключевой палитры. Пример таких палитр из Battle for Wesnoth:

    Свои палитры я захардкодил. В более сложной игре таблицы может быть удобно вынести в config-файлы. Вероятно можно хранить их и в графическом виде (изображения выше были построены на основании таблиц из игры), так их намного удобнее будет редактировать художнику. Но я пока так с графикой не заморачиваюсь.
  3. Фильтр я писал на основе com.jhlabs.image.LookupFilter. Вся суть фильтра заключается в вызове следующей функции для каждого пиксела изображения:
    private int filterRGBPoint(int x, int y, int argb) {
       if (TeamColors.contains(argb)) {
          return TeamColors.replaceBy(argb, this.playerId);
       }
       return argb;
    }
    Ссылка на полный код класса.

Результат:


P.S. да, спрайты вышли ядерных вырви-глаз оттенков, подбирать хорошие цвета буду позже :)

Комментариев нет:

Отправить комментарий