Как создать однотипные тени для однотипных объектов?
|
|
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); Если тени полупрозрачные, объекты заметно пересекаются, и совмещение теней начинает беспокоить, система с легкостью модернизируется добавлением рисования непрозрачных теней на поверхность, что уже после рисуется с прозрачностью на экране.
Для более точных советов было бы полезно увидеть зарисовку желаемого эффекта, поскольку возможных подходов и стилей множество.
|
|
| |