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

У меня спрайты очень простые, потому в палитре всего 2 цвета:

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

Свои палитры я захардкодил. В более сложной игре таблицы может быть удобно вынести в config-файлы. Вероятно можно хранить их и в графическом виде (изображения выше были построены на основании таблиц из игры), так их намного удобнее будет редактировать художнику. Но я пока так с графикой не заморачиваюсь. - Фильтр я писал на основе 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. да, спрайты вышли ядерных вырви-глаз оттенков, подбирать хорошие цвета буду позже :)



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