Пятница, 15 Ноября 2024, 04:01

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Смешивание сурфейсов в GML
FYgamesДата: Среда, 01 Июля 2020, 13:38 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте, недавно начал изучать сурфейсы, и возникла одна проблема.

У меня есть два сурфейса, отвечающие за темноту: один (S1) движется за игроком и постоянно меняется, другой (S2) статичный. Оба чёрного цвета, я просто меняю прозрачность. Сама проблема заключается в том, что когда S1 наезжает на S2, они смешиваются, в итоге становясь темнее. Как мне сделать так, чтобы в их общей зоне общее значение альфа было равно значению самого тёмного сурфейса? По возможности прошу лучше объяснить смешивание сурфейсов друг с другом.

P.S. я пытался смешивать через draw_set_blend_mode с разными константами и вставляя его туда же, где отрисовываются все сурфейсы, и туда, где происходит действие в самих сурфейсах (то есть внутри системы surface_set_target → surface_reset_target).


Сообщение отредактировал FYgames - Среда, 01 Июля 2020, 13:39
AlexanderBekkerДата: Среда, 01 Июля 2020, 16:03 | Сообщение # 2
BekkerDev Studio
Сейчас нет на сайте
Создай отдельный сюрфейс и рисуй в него два других с режимом смешивания bm_substract, подставляя разные константы, и смотри на результат. Или подобным образом рисуй сюрфейс S2 в сюрфейс S1 с определённым режимом смешивания, а потом S1 рисуй на экран. Я не помню, какие именно нужны константы, потому что комбинаций куча и каждая из них даёт разный результат, но копать нужно именно в этом направлении: путём накладывания одного сюрфейса на другой.

Разработчик, композитор и издатель инди-игр в Steam.
Редактор карт: BekkerDev Level Editor 4
Страница разработчика в Steam
Паблик ВК: BekkerDev Studio
FYgamesДата: Среда, 01 Июля 2020, 18:15 | Сообщение # 3
был не раз
Сейчас нет на сайте
Методом проб и ошибок, я нашёл нужную комбинацию.

1. Отрисовываем все сурфейсы в событии Draw.
2. В фоновом сурфейсе S1 (будь он светлее или темнее) пишем

draw_set_blend_mode_ext(bm_normal, bm_normal)

и после этого рисуем второй, видимый глазу, сурфейс S2. Таким образом мы приравниваем прозрачность общей части к прозрачности S2.

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

Вот код:

surface_set_target(S1) // Рисуем фоновый сурфейс
draw_clear_alpha(c_black, alpha1)// Чистим, рисуем чёрный цвет прозрачности alpha
draw_set_blend_mode_ext(bm_normal, bm_normal) // настраиваем смешивание

draw_surface(S2, x, y) // Рисуем S2 внутри S1.

draw_set_blend_mode(bm_normal) // Возвращаемся к обычному смешиванию
draw_reset_target();// Заканчиваем работу с S1

surface_set_target(S2) // Рисуем нужный сурфейс
draw_clear_alpha(c_black, alpha2)// Чистим, рисуем чёрный цвет прозрачности alpha, такую же прозрачность будет иметь общая часть
draw_reset_target();// Заканчиваем работу с S2
  • Страница 1 из 1
  • 1
Поиск:

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