Воскресенье, 22 Декабря 2024, 08:48

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Добавление источника света на существующий сурфейс
GrannerДата: Воскресенье, 09 Июля 2017, 13:40 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Добавляя сурфейсы в свой проект, наткнулся на проблему отрисовки источников света, не существующих изначально при загрузке комнаты. Итак:
Есть темная комната (нет, кошки там нету!) с выключенными лампами и рубильником. При входе в комнату в Create рубильника создается сурфейс и источник света от героя:
Код
SVET=surface_create(room_width,room_height);
surface_set_target(SVET);
draw_clear_alpha(-1,0);
surface_reset_target();
instance_create(hero.x, hero.y, svet_hero);

В объекте svet_hero в Draw прописываются параметры сурфейса и собственно свет от героя:
Код
surface_set_target(rubil.SVET)
draw_set_alpha(0.8)
draw_rectangle_color(0,0,room_width,room_height,0,0,0,0,false)
draw_set_color(c_black)
draw_set_alpha(1)
draw_set_blend_mode(bm_subtract)
draw_sprite(surf,0,hero.x,hero.y)
draw_set_blend_mode(bm_normal)
surface_reset_target()
draw_surface(rubil.SVET,0,0)

При определенном игровом событии включается рубильник и создаются источники света для объектов lampa. В объекте lampa в Draw пишется:
Код
surface_set_target(rubil.SVET)
draw_set_blend_mode(bm_subtract)
draw_sprite(surf,0,x,y)
draw_set_blend_mode(bm_normal)
surface_reset_target()

Источники света появляются, однако они более затемненные, чем аналогичный источник от hero. Как это исправить? (изучал примеры для фонарика от "не помню автора" и пример и т.д.)

Добавлено (02 июля 2017, 15:43)
---------------------------------------------
Проблему решил внесением в Draw объекта, отвечающего за отрисовку сурфейса, проверки на включение рубильника и в результате нее - отрисовки спрайта света между командами draw_set_blend_mode(...).
При отсутствии в комнате видов все прорисовывается нормально, но тут пришла еще одна задача. При следовании вида за объектом hero (а именно - при приближении к границам вида!) все объекты, чьи координаты зависят от вида, смещаются в ту же сторону, уходя за пределы вида. Это HUD и все передвигающиеся мобы. Даже отрисовывание пуль становится странно - пули создаются "где-то там" и летят "куда-то туда". В одной из тем про сурфейсы был тот же вопрос, но там решалось командой draw_surface(svet,0,0). У меня также в draw объекта стоит эта же команда. Но результат ужасный.

Странно, что такая проблема нигде не решается, хотя и не такая простая, как перемещение объекта на пиксель. Да и игр про ужастики в темной комнате достаточно много...

Добавлено (09 июля 2017, 13:40)
---------------------------------------------
Судя по всему, вопрос был или чересчур сложный или очень простой, поэтому пришлось упарываться самому. Итак,
Смещение двигающихся мобов решается просто: их глубина (да и глубина всех недвигающихся объектов) должна быть больше, чем глубина объекта, создающего сурфейс, дальше от зрителя. Тогда объекты затемняются чернотой и тихо там шебуршатся, пока не попадают в зону освещения.
Что касается элементов HUD и объектов с глубиной ближе к зрителю, то здесь можно в их Draw прописывать координаты не x, y, a x-view_xview и y-view_yview. При этом, в объекте, создающем сурфейс в Draw должно быть не draw_surface(svet,0,0), а draw_surface(svet, view_xview,view_yview).
Может быть, кому-нибудь пригодится.


Лучше - быть, чем - казаться.
P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку


Сообщение отредактировал Granner - Воскресенье, 02 Июля 2017, 15:34
  • Страница 1 из 1
  • 1
Поиск:

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