Глава 25. Гексагональные плитки (Шестигранники)
До сих пор мы использовали в качестве плиток прямоугольники (в лучшем случае квадрат Малевича). Можно использовать и другую форму шаблона плитки, например, треугольник. В этой главе сделаем возможным использование шестигранников. Шестигранная сетка широко используется в стратегических играх, т.к. обеспечивает использование движения по 3 направлениям при сохранении эквивалентности расстояний по каждому направлению. Диагональное перемещение в квадратной сетке не очень хорошо, потому что рассотяния по диагонали не эквиваленто расстояниям по горизонтали,вертикали. 
Правильный шестигранник 
Здесь показаны основной способ нумерации местоположения плиток на экране. Вертикально каждая следующая плитка размещается ниже на высоту плитки. tile3._y=tile2._y+h;
К тому же, каждый горизонтальный ряд плиток смещен вниз на половину высоты плитки. Можно использовать оператор modulo, чтобы выбрать очередной горизонтальный ряд. Формула row. x%2 будет возвращать 0, если Х будет кратно 2 (0, 2, 4, … - колонки A, C, E), и 1, если Х будет не четно (1, 3, 5, … - колонки B, D, F). Формула для определения У координаты: tile._y=y*h+(x%2)*h/2;
Горизонтально плитка размещается справа с шагом: tileC._x=tileB._x+s*1.5;
Обычно нам нужно найти некоторый размер, чтобы разместить плитку. Размер определяется от высоты плитки: s=h/cos(30)/2
Наконец формулы для размещения шестигранных плиток: s=h/Math.cos(30*Math.PI/180)/2; tile._x=x*s*1.5; tile._y=y*h+(x%2)*h/2;
Иногда нужно вычислить Х и У координаты плитки по экранным координатам, например, найти плитку, на которую указывает «мыша». x=_x/s/1.5; y=(_y-(x%2)*h/2)/h;
Этот пример, как раз это и показывает. Соседи шестигранниковС прямоугольными плитка было очень легко определять соседей, налево х-1, направо х+1, вниз у+1, вверх у-1. С шестигранниками несколько сложнее, нужно учитывать в каком вертикальном ряду находится текущая плитка. Для соседей сверху и снизу все также просто вниз у+1, вверх у-1. Для соседей слева-справа немножко сложнее, т.к. влево х-1 , есть сосед и сверху и снизу, аналогично для правой стороны. Если плитка в колонках B, D, F, то соседи: ul.y=y; dl.y=y+1; ur.y=y; dr.y=y+1;
Если плитка в колонках A, C, E, соседи: ul.y=y-1; dl.y=y; ur.y=y-1; dr.y=y;
Прежде чем использовать оператор modulo2 распишем код для 2 колонок: // ВНИЗ dx=x; dy=y+1; // ВВЕРХ ux=x; uy=y-1; // ВВЕРХ-ВЛЕВО col=x%2; col1=(x+1)%2; ulx=x-1; uly=y-col1; // ВНИЗ-ВЛЕВО dlx=x-1; dly=y+col; // ВВЕРХ_ВПРАВО urx=x+1; ury=y-col1; // ВНИЗ-ВПРАВО drx=x+1; dry=y+col;
Можно загрузить исходный код и клипы отсюда. На этом заканчивается текст учебника. Если хочется болььшего ищите в И-нете, достаточно в поисковике набрать FLASH, actionscript и т.п. и будет вам великое счастье. Есть вопросы - пишите мне на semikin@dionaholding.ru Читаем дальше - Продолжение следует - Переход в объектно-ориентированную среду ActionScript 2. Возвращаемся на Начало учебника
|