Понедельник, 25 Ноября 2024, 21:03

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Создание динамического освещения
kukinillo777Дата: Среда, 31 Декабря 2014, 12:15 | Сообщение # 1
частый гость
Сейчас нет на сайте
Если вы хотите быстро и легко сделать динамическое освещение в игре, то вам сюда.

Сохраняем спрайт под названием light01 и с origin`ом в центре.

Создаем объект light (можно и без спрайта) и «мастер» объект light_main (спрайт по желанию). Он будет главным объектом ответственным за создание и рисование освещения. light будет рисовать источники света.

В Create к light_main пишем:

создаем площадь для рисования по размеру комнаты
Код
globalvar dlight_surface; ВНИМАНИЕ – Эту строку писать только если у вас Game Maker 7.0 и выше. Если нет – везде перед dlight_surface ставить global. . (т.е. global.dlight_surface)
dlight_surface = surface_create(room_width,room_height)


В Begin Step(!):

Код
заливаем площадь белым (!) цветом
surface_set_target(dlight_surface) указываем цель для рисования
draw_set_color(c_white) указываем цвет
draw_rectangle(0,0,room_width,room_height,false) рисуем
surface_reset_target() отменяем цель


Необходимы некоторые объяснения. Для начала – что такое surface. Это некоторая площадь (canvas/полотно) на котором можно рисовать, незаметно для пользователя, для последующего рисования её в игре. То есть, вы рисуете на ней как на экране, а потом рисуете её уже на экране как всего-навсего один спрайт. Согласитесь, удобно – нарисовать на одном полотне 100 спрайтов, а потом поместить полотно на экране всего одной строкой кода. В основном функция необходима для сложных эффектов и чтобы не затрачивать ресурсы компьютера для рисования одних и тех же неменяющихся спрайтов в каждом кадре (компьютеру гораздо легче нарисовать один спрайт, чем десятки). Обратите внимание, что на полотне можно рисовать в любом event`е, а не только в draw`е, как это происходит с рисованием на экране. Зачем мы заливаем всё полотно белым а не чёрным цветом? Узнаете позже. Зачем в begin step? Тоже позже.

В Draw:

Код
draw_set_blend_mode(bm_subtract)
draw_surface(dlight_surface,0,0) рисуем полотно
draw_set_blend_mode(bm_normal)


Ну а теперь заходим в light и пишем в Step:

Код
surface_set_target(dlight_surface)
draw_set_blend_mode(bm_subtract)
draw_sprite(light01,0,x,y)
draw_set_blend_mode(bm_normal)
surface_reset_target()


Ну а теперь объясняю. Существуют 3 различных event`а step`а. begin step – в нем находятся события, которые должны выполнятся в самом начале обработки кадра, в step – в середине, а в end step – в конце. Чтобы нарисовать спрайт light01 ПОВЕРХ белой заливки, нам нужно залить полотно в начале обработки, а уже потом, в середине, нарисовать спрайт. Теперь зачем белый. Как вы могли увидеть, мы используем bm_subtract – смешивание вычитыванием. Т.е. спрайт будет рисоваться полностью чёрным, а прозрачность точек будет зависеть от яркости точки в изначальном варианте. Но это лучше увидеть самому – поэкспериментируйте на каком-то другом файле (не в данном). При рисовании спрайтов вычитыванием на белой поверхности, в последней образуются чёрные «дырки». При рисовании вычитыванием полотна, экран зальётся черным цветом, в котором будут прозрачные дырки на месте тех чёрных дыр в поверхности.

Ставим в комнату один light_main и сколько хотите light`ов.

Вот, собственно и всё.

Примечание: Этот способ не оптимизирован. Оптимизировать его не тяжело для продвинутых пользователей.


Все свои желания можно воплотить в своей игре, если руки из нужного места растут. А если и мозга работает, то и в реальности все сделаешь :)

Сообщение отредактировал kukinillo777 - Среда, 31 Декабря 2014, 17:46
Quad69Дата: Среда, 31 Декабря 2014, 12:21 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Урок так то помог, но указывай автора!
За такое и минус можно поставить!
kukinillo777Дата: Среда, 31 Декабря 2014, 12:28 | Сообщение # 3
частый гость
Сейчас нет на сайте
maksim1221232, указал. Это была не моя статья. Я сам оттуда многое извлек.

Все свои желания можно воплотить в своей игре, если руки из нужного места растут. А если и мозга работает, то и в реальности все сделаешь :)
aFriendДата: Среда, 31 Декабря 2014, 16:41 | Сообщение # 4
участник
Сейчас нет на сайте
динамическое освещение - освещение, которое меняется время от времени, а это просто кружки вокруг обьектов
kukinillo777Дата: Среда, 31 Декабря 2014, 17:46 | Сообщение # 5
частый гость
Сейчас нет на сайте
aFriend, статья расчитана на новичков.

Все свои желания можно воплотить в своей игре, если руки из нужного места растут. А если и мозга работает, то и в реальности все сделаешь :)
AnthemДата: Среда, 31 Декабря 2014, 18:56 | Сообщение # 6
Д'Артаньян
Сейчас нет на сайте
kukinillo777, т.е. новичкам можно давать некорректные понятия?
И имени автора не видно...


Текстовый контент для вашей игры (бесплатно)
Сценарист, геймдизайнер для Вашей игры
HiNuToДата: Среда, 31 Декабря 2014, 19:01 | Сообщение # 7
частый гость
Сейчас нет на сайте
Неплохо, но статьи вроде этой - гораздо более понятные. Их много, и ты выбрал не самую удачную...

И даже если без тебя я слаб,
Сейчас для меня будто оргазм состояние зла.


Сообщение отредактировал HiNuTo - Среда, 31 Декабря 2014, 19:02
kukinillo777Дата: Среда, 31 Декабря 2014, 19:28 | Сообщение # 8
частый гость
Сейчас нет на сайте
Ну что теперь поделаешь.

Все свои желания можно воплотить в своей игре, если руки из нужного места растут. А если и мозга работает, то и в реальности все сделаешь :)
roguelikerДата: Четверг, 01 Января 2015, 18:08 | Сообщение # 9
частый гость
Сейчас нет на сайте
Цитата Anthem ()
И имени автора не видно...

Все это сплагиачено.
  • Страница 1 из 1
  • 1
Поиск:

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