Понедельник, 11 Ноября 2024, 02:38

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как создать однотипные тени для однотипных объектов?
GrannerДата: Воскресенье, 29 Января 2017, 20:39 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Для 2D TDS решил добавить теней для двигающихся объектов. Есть ли какой-то общий принцип создания теней? То ли их надо закладывать уже при рисовании спрайта объекта, то ли они делаются как отдельный объект, следующий за игровым?
Попробовал в GM8 сделать второй вариант - при создании игрового объекта ball создается объект тени и следует за игровым. Однако экземпляров объекта ball у меня несколько, а тень (точнее, ее несколько экземпляров) прилипает к одному объекту, а не к нескольким. Может ли кто помочь натолкнуть в нужном направлении?


Лучше - быть, чем - казаться.
P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
AlexanderBekkerДата: Воскресенье, 29 Января 2017, 21:03 | Сообщение # 2
BekkerDev Studio
Сейчас нет на сайте
Гораздо проще, дешевле и правильнее рисовать тень в событии Draw у объекта — сперва должна быть отрисовка тени, затем уже самого объекта. Создавать для тени отдельный объект совершенно нет смысла, но если всё-таки нужен именно этот способ, то делается это так:
В Create:
Код
obj_Shadow = instance_create(x, y, objShadow);

В End Step:
Код
obj_Shadow.x = x;
obj_Shadow.y = y;


Разработчик, композитор и издатель инди-игр в Steam.
Редактор карт: BekkerDev Level Editor 4
Страница разработчика в Steam
Паблик ВК: BekkerDev Studio
GrannerДата: Воскресенье, 29 Января 2017, 21:13 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Да, отдельный объект для тени - это перебор, согласен :), но в твоем примере тень создается НАД объектом. (ап: Я тормоз, не выставил глубину тени)
А если через Draw - мои объекты анимированы, например, вращаются. А если рисовать тени через Draw, то тени работают, но как заставить основной объект вращаться?

Есть интересный пример для тени - но там тоже проблему с вращением не могу решить.


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


Сообщение отредактировал Granner - Воскресенье, 29 Января 2017, 21:25
AlexanderBekkerДата: Понедельник, 30 Января 2017, 08:35 | Сообщение # 4
BekkerDev Studio
Сейчас нет на сайте
Тогда нужно дописать в Create:
Код
obj_Shadow.depth = depth + 1;

Или же в самом объекте тени установить значение глубины ниже таковой у игрока.

Чтобы объект правильным образом отображался с учётом всех параметров, нужно вручную прописывать его отрисовку:
Код
draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale, image_angle, image_blend, image_alpha);

В Game Maker Studio для таких целей есть ещё такая удобная функция draw_self().


Разработчик, композитор и издатель инди-игр в Steam.
Редактор карт: BekkerDev Level Editor 4
Страница разработчика в Steam
Паблик ВК: BekkerDev Studio
LosiahДата: Понедельник, 30 Января 2017, 09:41 | Сообщение # 5
почетный гость
Сейчас нет на сайте
а почему не сделать тень на этапе анимации или рисования спрайта? меньше нагрузок на игру будет.



Сообщение отредактировал Losiah - Понедельник, 30 Января 2017, 09:44
YellowAfterlifeДата: Понедельник, 30 Января 2017, 12:06 | Сообщение # 6
Сейчас нет на сайте
Цитата Granner ()
Есть ли какой-то общий принцип создания теней?

Создать отдельный объект, что будет заниматься рисованием теней.
Назначить объекту высокую глубину (чтобы тени были всегда под объектами).
В событии рисования перебирать подходящие объекты, рисуя [под ними] тени:
Код
with (obj_ball) draw_sprite(spr_ball_shadow, 0, x, y);

Если тени полупрозрачные, объекты заметно пересекаются, и совмещение теней начинает беспокоить, система с легкостью модернизируется добавлением рисования непрозрачных теней на поверхность, что уже после рисуется с прозрачностью на экране.

Для более точных советов было бы полезно увидеть зарисовку желаемого эффекта, поскольку возможных подходов и стилей множество.


  • Страница 1 из 1
  • 1
Поиск:

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