Перерыл гугл, сам пытался лазить в скриптах, но так и не нашел способа сделать так, что бы тени добавляемые инструментом "Тень" отображались поверх всех тайлов, а не только поверх тайлов "A". Кто-нибудь знает как это можно сделать?
Перерыл гугл, сам пытался лазить в скриптах, но так и не нашел способа сделать так, что бы тени добавляемые инструментом "Тень" отображались поверх всех тайлов, а не только поверх тайлов "A". Кто-нибудь знает как это можно сделать?
Никак
Лицензионный VX Ace. Спасибо Петр.
2 года мукеризма в пустую.
Это сложно. Если я ничего не путаю, за отображение карты отвечает класс Tilemap, который является встроенным и не подлежит редактированию, и потому простого способа поменять поведение тени нет.
Видимо, нужно заменить это поведение своим кодом:
- написать код, который читает тень из $game_map.data и отображает её поверх других клеток,
- а первоначальный код отображения тени отключить (путём установки всей тени в 0, или ещё как-нибудь).
Сама тень хранится в первых четырёх байтах четвёртого слоя $game_map.data[x, y, 3] (биты по порядку дают ЛВ ПВ ЛН ПН, где Л — левый, П — правый, В — верхний, Н — нижний углы клеток соответственно), так что в собственном скрипте это наверняка возможно. Т.е. 1 = тень в левом верхнем полуквадрате, 2 = тень в правом верхнем полуквадрате, 4 — в левом нижнем, 8 — в правом нижнем. Соответственно, тень слева закодируется как 1+4=5. (Учитывайте, что другие биты в $game_map.data[x, y, 3] используются для записи регионов, так что нужно читать именно нужные биты побитовые операторы в Руби: a & 1 будет равно 1, если левая верхняя полуклетка содержит тень, и 0, если она не содержит тени.)
Возможные подводные камни:
- Нужно знать Руби, чтобы это сделать.
- Скорость. Класс Tilemap сделали встроенным, чтобы карта рисовалась быстрее. Если вы заменяете часть его функциональность своим кодом для рисования тени, Ваша игра будет работать медленнее.
N.B. Я не работаю с VX Ace и пост выше написан по результатам краткого подсматривания в код его скриптов. Возможно, существует более простой вариант, о котором я не знаю.
Последний раз редактировалось Deme; 29.05.2017 в 12:53.
«quī legis ista, tuam reprehendō, sī mea laudās // omnia, stultitiam; / sī nihil, invidiam» (Jōhannis Audoenī)
'Ты, кто читает это: я порицаю, если ты хвалишь у меня // всё, твою глупость; / если ничего — твою злобу.' (Джон Оуэн)
Основная проблема такого подхода не техническая, а графическая: неясно, что делать с клетками, которые расположены над героем.
Рисовать на них тень? Тогда получится, что дом бросает тень очень высоко. Например, дом может отбросить тень на дерево, которое выше самого дома.
Не рисовать на них тень? Тогда двухуровневые объекты (скажем, деревья) будут с заметным переходом. То есть половина дерева затемнена, а другая половина — нет. Этот переход будет выглядеть довольно неестественно.
В конечном итоге стандартная графика всё равно не подойдёт для такого режима, её придётся редактировать. А раз графику всё равно придётся редактировать — возможно, проще с самого начала добавить в графику два вида объектов («в тени» и «вне тени») и не усложнять код?
«quī legis ista, tuam reprehendō, sī mea laudās // omnia, stultitiam; / sī nihil, invidiam» (Jōhannis Audoenī)
'Ты, кто читает это: я порицаю, если ты хвалишь у меня // всё, твою глупость; / если ничего — твою злобу.' (Джон Оуэн)
Нашел скрипт убирающий эти тени. Теперь думаю как из этого можно сделать то что необходимо.
Спойлер код:
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)
Социальные закладки