1 function moveCharacter(){
2 if (world.char.moving){
3 world.char.tempx =world.char.x+world.char.xmov;
4 world.char.tempz =world.char.z+world.char.zmov;
5 world.char.tempy =world.char.y+world.char.ymov;
6 var sx =world.char.startx;
7 var sz =world.char.startz;
8 var ex =world.char.endx;
9 var ez =world.char.endz;
10 var tempx =world.char.tempx;
11 var tempz =world.char.tempz;
12 if ((ex-sx)/Math.abs(ex-sx)
.!=(ex-tempx)/Math.abs(ex-tempx)
.||(ez-sz)/Math.abs(ez-sz)
.!=(ez-tempz)/Math.abs(ez-tempz)){
13 world.char.moving =false;
14 world.char.xmov =0;
15 world.char.zmov =0;
16 world.char.tempx =ex;
17 world.char.tempz =ez;
18 world.char.clip.gotoAndStop
.("stand"+world.char.frame);
19 }
20 }
21 }
Первой задачей этой функции является проверка, двигается ли персонаж. Если да (то есть moving равна true), то мы перемещаем его. Строки 3-5 устанавливают временную позицию персонажа на основе его текущей позиции и его скорости в каждом направлении. Затем мы создаем ссылки на его начальную и конечную позиции с тем, чтобы уже довольно длинное выражение if в строке 12 выглядело немного более рациональным. Условие, которое мы ищем в строке 12 довольно просто, хотя оно и выглядит сложным. Мы пытаемся определить, достиг ли персонаж своей цели назначения. Если да, то знак (+ или -) разницы между A) его текущего положения и цели назначения и B) между начальной позицией и целью назначения будут различны (как в x, так и в z- направлениях).
Давайте возьмем пример с персонажем, который двигается только в направлении x. Начальная позиция равна 10, а конечная позиция равна 100. Знак разности между конечной и начальной позицией +(положительный). Вы найдете его делением разности на абсолютное значение этой разности:
(endx-startx)/Math.abs(endx-startx)
Мы сравниваем это значение со значением знака разности между конечной позицией и текущей позицией. Так, если текущая позиция равна 30, то (100-30)/Math