2D освещение в GM. Сурфейсы
И так. Первый вопрос новичков - что за сурфейсы? Вы про что вообще? Отвечу.
Сурфейсы - область на экране, записывающая в себя отдельные функции рисования, такие как draw_pixel, draw_circle, draw_sprite и т.п, а потом выводит это как отдельный спрайт. Это можно использовать для сохранения FPS - 10 спрайтов хорошо, а 10 в сурфейсе - лучше.
В общем, создадим spr_light, размером 128х128, зальем черным цветом и используем круговой градиент. Выровняем по центру.
Далее начинается самое интересно. Создайте obj_lc (т.е. light controller) и пропишите в create:
Код
globalvar backsurf//Создаем сурфейс для заливки фона, хотя пока - это только переменная.
backsurf=surface_create(room_width,room_height)//Создаем сам сурфейс.
backsurf=surface_create(room_width,room_height)//Создаем сам сурфейс.
Дальше в begin step:
Код
surface_set_target(backsurf)//Выбираем, на каком сурфейсе будем рисовать. Все, что ниже, не сразу рисуется, а только записывается в сурфейс.
draw_set_color(c_white)//Выбираем цвет.
draw_rectangle(0,0,room_width,room_height,false)//Рисуем прямоугольник на всю комнату.
surface_reset_target()//Отменяем выбор сурфейса.
draw_set_color(c_white)//Выбираем цвет.
draw_rectangle(0,0,room_width,room_height,false)//Рисуем прямоугольник на всю комнату.
surface_reset_target()//Отменяем выбор сурфейса.
Дальше, собственно, рисуем сам сурфейс. В рисование пишем:
Код
draw_set_blend_mode(bm_subtract)//Режим рисования - "отнятие". Смешно, да? Объяснение сей функции будет немного позже.
draw_surface(backsurf,0,0)//Рисуем наш сурфейс.
draw_set_blend_mode(bm_normal)//Нормальный режим рисования.
draw_surface(backsurf,0,0)//Рисуем наш сурфейс.
draw_set_blend_mode(bm_normal)//Нормальный режим рисования.
Готово - мы закончили работу над контроллером. Дальше создадим один объект - fonar. Объект, который и будет нашим осветителем. Пишем в step:
Код
surface_set_target(backsurf)//Выбираем сурфейс.
draw_set_blend_mode(bm_subtract)//Как и обещал - объясняю. Наш фон будет залит черным цветом (не в настройках комнаты, а после отрисовки сурфейса. Эта функция удаляет черный цвет (меняет его прозрачность) в месте отрисовки, и рисует там натуральный цвет комнаты.
draw_sprite(spr_light,0,x,y)//Рисуем сам фонарик.
draw_set_blend_mode(bm_normal)//Нормальный режим рисования.
surface_reset_target()//Отменяем выбор сурфейса.
draw_set_blend_mode(bm_subtract)//Как и обещал - объясняю. Наш фон будет залит черным цветом (не в настройках комнаты, а после отрисовки сурфейса. Эта функция удаляет черный цвет (меняет его прозрачность) в месте отрисовки, и рисует там натуральный цвет комнаты.
draw_sprite(spr_light,0,x,y)//Рисуем сам фонарик.
draw_set_blend_mode(bm_normal)//Нормальный режим рисования.
surface_reset_target()//Отменяем выбор сурфейса.
Вот и все. Как вы поняли - все не так сложно! До встречи!
3 комментария
На 4 с минусом.