Реклама

 
0 голосов
 
855 просмотров
18.10.2016 / 21:49  Alexandr

тени для тайлового движка

Собираю платформенный движок на j2me(TiledLayer), и
решил прикрутить прорисовку
тайловой тени с разным уровнем прозрачности.
В игре два слоя для фона и основой карты, добавил еще один слой для теней и тайлсет на 4 темных тайла с разным уровнем прозрачности.. Подскажите алгоритм, как генерировать карту теней на основе массива клеток, что бы получилось как на скрине.
Изм. Alexandr от 18.10.2016 / 21:49
Ответы
 
1 голос
 
# 27.10.2016 / 10:33  RooMeN
  1. int x, y, w, h;
  2. int shadow;
  3. boolean find;
  4.  
  5. for (int j = 0; j < height; j++) {
  6.     for (int i = 0; i < width; i++) {
  7.         if (layer[j][i] > 0) {
  8.             shadow = 4;
  9.             find = false;
  10.  
  11.             for (int level = 1; level <= 4; level++) {
  12.                 x = i - level;
  13.                 y = j - level;
  14.                 w = i + level + 1;
  15.                 h = j + level + 1;
  16.  
  17.                 if (x < 0) x = 0;
  18.                 if (y < 0) y = 0;
  19.                 if (w > width) w = width;
  20.                 if (h > height) h = height;
  21.  
  22.                 for (int n = y; n < h; n++) {
  23.                     for (int m = x; m < w; m++) {
  24.                         if (layer[n][m] == 0 && level < shadow) {
  25.                             shadow = level;
  26.                             find = true;
  27.                         }
  28.                     }
  29.                 }
  30.  
  31.                 if (find) break;
  32.             }
  33.  
  34.             shadows[j][i] = shadow;
  35.         }
  36.     }
  37. }

width, height - размер карты
layer[][] - массив карты
shadows[][] - массив теней (от 1 до 4)
Изм. RooMeN от 27.10.2016 / 10:40

1.png (10.27 кб.)
 
0 голосов
 
# 26.10.2016 / 12:01  RooMeN
Есть идея - слой с тенями по клеткам воздуха заполняешь 0. Дальше идёшь по клеткам земли, для каждой клетки вокруг смотришь в слое теней наименьшее значение и присваиваешь на 1 больше.
 
0 голосов
 
# 19.10.2016 / 05:21  Death
Попробуй сделать так:
у нас у границы тайлов, то есть, там где у тайла земли, с лева нет тайла, значит с право ставь тень, и проверя в право на "воздух", если его нет, то рисуй тень темнее, и так сдвигайся в право до "темноты", и так же сверху и снизу. Это всё один раз занеси в уровень. А потом по ходу изменнения положения тайлов, обновляй соседние тени что бы не тормозить аппарат.
19.10.2016 / 09:47  Alexandr
тоже так думал, но тогда тени будут накладываться друг на друга, если например кусок стены будет 8 на 8 блоков.
Нужно как-то проверять сразу 4 тайла, еще и запоминать уровень затенения каждого
Всего: 3

Мы в соцсетях

vk tw tg yt

Пожертвования

Аноним2850 р.
Freddy1700 р.
riseremi1611 р.
NaruTrey800 р.
vlavolk637 р.
  © aNNiMON (Melnik Software)