abs(100-30) дает положительный результат. Поскольку это то же самое, что и знак от начальной и конечной позиций, персонаж еще не достиг цели (Есть!).
В некоторой точке текущая позиция персонажа будет больше чем цели назначения – скажем, 105. Значение выражения (100-105)/Math.abs(100-105) отрицательно. Поскольку это значение более не соответствует положительному значению найденному со стартовой и конечной позициями, мы знаем, что персонаж достиг цели назначения. Мы выполняем эту проверку как для направления x, так и для направления y. Как только одно из этих двух положений выполнено, персонаж должен остановиться.
В строке 13 мы устанавливаем свойство moving в значение false, а затем векторную скорость в 0. В строках 16 и 17 мы устанавливаем временную позицию персонажа равной цели назначения. Затем, в строке 18 мы изменяем отображаемый кадр персонажа на статичный кадр.
Последняя функция, которую нам нужно рассмотреть, это detectObjects(). Эта функция вызывается в каждом кадре и определяет, шагнул ли персонаж во фрейм, который содержит объект (типа растения или блока).
1 function detectObjects(){
2 //Extend a little in the direction of motion
3 var x =world.char.tempx+world.char.feelerx;
4 var z =Math.abs(world.char.tempz+world.char.feelerz);
5 var x_tile =Math.ceil(x/world.cellWidth);
6 var z_tile =Math.ceil(z/world.cellWidth);
7 if (world.tiles [x_tile ][z_tile ].isObject !=true){
8 var x =world.char.tempx;
9 var z =Math.abs(world.char.tempz);
10 var x_tile =Math.ceil(x/world.cellWidth);
11 var z_tile =Math.ceil(z/world.cellWidth);
12 var depth =world.tiles [x_tile ][z_tile ].depth+1;
13 world.char.clip.swapDepths(depth);
14 }else {
15 world.char.tempx =world.char.x;
16 world.char.tempz =world.char.z;
17 world.char.xmov =0;
18 world.char.ymov =0;
19 world.char.moving =false;
20 var frame =world.char.frame;
21 world.char.clip.gotoAndStop("stand"+frame);
22 }
23 }
В строках 3-6 мы прибавляем значения feelerx и feelerz к временным значениям x и z, для определения, какой плитки касается щупальце