Reker | Дата: Воскресенье, 28 Октября 2018, 03:45 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Сделал сурфейс, чтобы вокруг персонажей и обьектов всегда был свет. Всё хорошо, но я хочу ещё добавить другой свет, чтобы он был поверх этого когда нужно. На первой пикче, как работает обычный свет. Всё хорошо. На второй я хочу чтобы он был как на первой пикче, но только другим цветом и полностью замещал первое свещение.
Вот код obj_surf_light
Код create
surf = surface_create(room_width,room_height);
Код END STEP
surface_set_target (surf); gpu_set_blendmode(bm_normal) draw_clear_alpha (make_color_rgb(10,10,10), 1); surface_reset_target ();
//ЕСЛИ СУЩЕСТВУЕТ ИГРОК if (instance_exists(obj_player)) { var px = obj_player.x + random_range(0, 1.5); var py = obj_player.y + random_range(0, 1.5); var rr = random_range(0, 1.5); surface_set_target (surf); gpu_set_blendmode(bm_subtract); draw_set_alpha(.35); draw_circle_color(px, py, 55 + rr,c_gray, c_gray, 0); draw_set_alpha(.75); draw_circle_color(px, py, 44 + rr,c_gray, c_gray, 0); draw_set_alpha(1); draw_circle_color(px, py, 31 + rr,c_gray, c_gray, 0); gpu_set_blendmode(bm_normal); surface_reset_target (); }
// ЕСЛИ ЕСТЬ ОБЬЕКТ НПС RM_6 if (instance_exists(obj_npc_rm_6)) { var px = obj_npc_rm_6.x + random_range(0, 1.5); var py = obj_npc_rm_6.y + random_range(0, 1.5); var rr = random_range(0, 1.5); surface_set_target (surf); gpu_set_blendmode(bm_subtract);// НА ПЕРВОЙ ПИКЧЕ!! gpu_set_blendmode(bm_add);// НА ВТОРОЙ ПИКЧЕ!! draw_set_alpha(.35); draw_circle_color(px, py, 120 + rr,make_color_rgb(46,160,232), make_color_rgb(46,160,232), 0); draw_set_alpha(.75); draw_circle_color(px, py, 84 + rr,make_color_rgb(139,196,232), make_color_rgb(139,196,232), 0); draw_set_alpha(1); draw_circle_color(px, py, 51 + rr,c_white, c_white, 0); gpu_set_blendmode(bm_normal); surface_reset_target (); }
В draw я просто рисую сурфейс draw_surface(surf,0,0);
У меня есть 2 предположения. Проблема кроется в Код surface_set_target (surf); gpu_set_blendmode(bm_normal) draw_clear_alpha (make_color_rgb(10,10,10), 1); surface_reset_target ();
тк он рисует с этим цветом(make_color_rgb(10,10,10)), а не с теми которые я задаю обьекту npc.
Или же проблема со смешиванием, которое я плохо понимаю. В любом случае, надеюсь, кто-нибудь знает как мне быть. Постараюсь пока, что найти выход сам.
Добавлено (28 Октября 2018, 04:21) --------------------------------------------- Попробовал создать ещё один сурф(в этом же объекте), для нового света.
Код surface_set_target (surf1); gpu_set_blendmode(bm_normal); draw_clear_alpha (make_color_rgb(46,160,232), 1); surface_reset_target (); if (instance_exists(obj_npc_rm_6)) { var px = obj_npc_rm_6.x + random_range(0, 1.5); var py = obj_npc_rm_6.y + random_range(0, 1.5); var rr = random_range(0, 1.5);
surface_set_target (surf1); gpu_set_blendmode(bm_subtract); draw_set_alpha(.35); draw_circle_color(px, py, 120 + rr,make_color_rgb(46,160,232), make_color_rgb(46,160,232), 0); draw_set_alpha(.75); draw_circle_color(px, py, 84 + rr,make_color_rgb(139,196,232), make_color_rgb(139,196,232), 0); draw_set_alpha(1); draw_circle_color(px, py, 51 + rr,c_white, c_white, 0); gpu_set_blendmode(bm_normal); surface_reset_target (); }
Не понимаю, почему голубой цвет стал по вверх серого.
Добавлено (28 Октября 2018, 20:34) --------------------------------------------- Проще говоря, мне нужно, чтобы второй круг, был другого цвета.
Добавлено (28 Октября 2018, 21:06) --------------------------------------------- Фух, ну вроде разобрался. Вроде вышло примерно то, что я хотел. Поиграл со смешиванием. Там есть парочку интересных эффектов. Достаточно интересно. Например 1 пикча, будто ты идёшь в каком нибудь зелёном тумане и видишь только перед собой. 2 пикча, что я хотел(не точь в точь, но очень близко)
Код gpu_set_blendmode_ext(bm_src_alpha,bm_zero) draw_set_alpha(.35); draw_circle_color(px, py, 120 + rr,make_color_rgb(46,160,232), make_color_rgb(46,160,232), 0); draw_set_alpha(.35); draw_circle_color(px, py, 84 + rr,make_color_rgb(139,196,232), make_color_rgb(139,196,232), 0); gpu_set_blendmode(bm_subtract) draw_set_alpha(1); draw_circle_color(px, py, 51 + rr,c_white, c_white, 0); gpu_set_blendmode(bm_normal); surface_reset_target ();
Сообщение отредактировал Reker - Воскресенье, 28 Октября 2018, 21:07 |
|
| |