Воскресенье, 17 Ноября 2024, 20:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Цвет в игре
XsmileXДата: Среда, 25 Июля 2012, 20:21 | Сообщение # 1
Добряк И Весельчак
Сейчас нет на сайте
Как заменить цвет один цвет на спрайте, при этом не трогая другие?
Примерно как надо сделать:
у одного спрайта, зелёный цвет кожи и синяя рубашка
и когда мы на него нажмём рубашка станет красной. happy



http://rghost.ru/47688462
ReanДата: Среда, 25 Июля 2012, 20:36 | Сообщение # 2
участник
Сейчас нет на сайте
В данном случае, лучшим вариантом будет создание набора различных спрайтов (сколько необходимо цветов - столько и спрайтов). Пример: спрайт с красной рубашкой, спрайт с синей и т.д.
Изменение цвета пикселей спрайта возможно, если я не ошибаюсь, только через Surface (Поверхности). Придется создавать цикл и уже в цикле проверять каждый пиксель Поверхности на определенный цвет и заменять его на другой.
Последний вариант менее предпочтителен, так как является более ресурсозатратным.
XsmileXДата: Среда, 25 Июля 2012, 22:18 | Сообщение # 3
Добряк И Весельчак
Сейчас нет на сайте
Rean, Это я и сам знал. smile
Я хотел просто способ попроще найти. biggrin



http://rghost.ru/47688462
ReanДата: Четверг, 26 Июля 2012, 00:43 | Сообщение # 4
участник
Сейчас нет на сайте
XsmileX, куда уж проще?
Есть еще один вариант, но как мне кажется, он будет уместен лишь в том случае, если спрайт рубашки находится в отдельном спрайте.
Сам же способ заключается в использовании свойства image_blend. Данное свойство принимает значение цвета, с которым должен быть смешан спрайт. Как именно это работает точно не скажу, но есть предположение, что для нужного эффекта стоит использовать спрайт белого цвета (именно в тех местах, где нужно сменить цвет). Фон спрайта должен быть прозрачным.


Сообщение отредактировал Rean - Четверг, 26 Июля 2012, 00:43
TimKruzДата: Четверг, 26 Июля 2012, 01:20 | Сообщение # 5
старожил
Сейчас нет на сайте
XsmileX, вообще есть простой (эээ... если программировать на Delphi/C++ и т.п., а не GML) и быстрый способ - использовать маску. Она чёрно-белая (с оттенками серого, конечно), и раскрашивается нужным цветом, а потом дорисовываются неизменяемые части. Точно алгоритм не помню... Скорость метода определяется тем, что не нужно обрабатывать каждый пиксель, можно просто логически сложить маску с закрашенным прямоугольником с помощью WinAPI функции BitBlt, эта функция работает очень быстро. А получается всё так, что чёрный цвет (000000) в маске принимает 100% соответствующего цвета, а белый (FFFFFF) остаётся белым, ну и серые оттенки соответственно располагаются... Получается экономия - не нужно создавать несколько разноцветных картинок, достаточно двух (основной спрайт и маска), обработанный цветом спрайт нужно сохранить в оперативной памяти (операция, конечно, быстрая, но делать её каждый раз невыгодно, будет существенная потеря скорости).
Но вот можно ли и как можно сделать это в GM - не знаю... Вроде бы в GM можно подключать dll, так почему бы не попробовать подключить что-то из WinAPI? Функция BitBlt содержится в c://windows/system32/gdi32.dll, только, правда, она требует указатели (handle) на обрабатываемые картинки, уж не знаю, как их в GM добыть, наверное, стандартными средствами нельзя (разве что с помощью отдельной библиотеки)...




Сообщение отредактировал TimKruz - Четверг, 26 Июля 2012, 01:22
ReanДата: Четверг, 26 Июля 2012, 09:40 | Сообщение # 6
участник
Сейчас нет на сайте
TimKruz, в данном случае понадобится маска рубашки, которую необходимо менять, ведь так? А если это так, то не надо никаких dll, достаточно будет использования свойства image_blend у спрайта "с белой рубашкой".
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг