Я работал над системой освещения для блочной игры, которую я разрабатываю (вспомните Terraria), и я немного запутался в одном моменте. Когда блок обновляется, его уровень освещенности также обновляется на основе уровня его соседних (смежных) блоков.
Теперь рассмотрим такую ситуацию: игрок выкапывает яму в земле, выставляя блок, находящийся глубоко в земле, на солнце. Это дает ему уровень освещенности 16 из 16, а его соседям уровень освещенности 15. Однако, если игрок снова заполнит отверстие, блок останется с уровнем освещенности 16. Моей первой мыслью было «аудитить». " уровень освещенности блока при его обновлении путем проверки того, что он не отличается более чем на одну единицу от уровня его соседей, но это оказалось неэффективным.
Единственным решением, которое я мог придумать, было бы специально проверить, подвергается ли размещенный блок воздействию солнечного света, и если да, то обновить уровень освещенности блока под ним до 15 из 16. Однако это не было бы эффективным для исправления ошибки. проблема в определенных ситуациях, и соседние блоки не смогут уменьшить уровень освещенности из-за соседних блоков. Возможно, мне просто нужно немного отступить и еще раз взглянуть на проблему, но я подумал, что тем временем могу опубликовать здесь. У кого-нибудь есть предложения, как обойти это?