mapToIsoWorld(xm,ym);
3 var xm =temp [0 ];
4 var zm =temp [1 ];
5 var x_cell =Math.ceil(xm/world.cellWidth);
6 var z_cell =Math.ceil(Math.abs(zm)/world.cellWidth);
7 var xm =x_cell*world.cellWidth-world.cellWidth/2;
8 var zm =-(z_cell*world.cellWidth-world.cellWidth/2);
9 var x_cell_diff =world.char.x_cell-x_cell;
10 var z_cell_diff =world.char.z_cell-z_cell;
11 if (!world.char.moving &&world.tiles [x_cell ][z_cell ].
.exists &&(x_cell_diff !=0 ||z_cell_diff !=0)&&
.((x_cell_diff ==0 ||Math.abs(x_cell_diff)==1)&&
.(z_cell_diff ==0 ||Math.abs(z_cell_diff)==1))){
12 clickAccepted(xm,zm,x_cell,z_cell);
13 sendMove({type:"move",xm:xm,zm:zm,x_cell:x_cell,
.z_cell:z_cell});
14 }
15 }
Посмотрите на строки 12 и 13. В строке 12 вызывается функция clickAccepted() и в нее передаются значения для положения курсора мыши и плитки, которая была нажата. В строке 13 мы посылаем ход другому игроку. Когда экземпляр игры другого игрока получает ход, то в экземпляре этого игрока вызывается функция moveReceived(). Этот экземпляр игры вызывает функцию clickAccepted() и передает информацию, необходимую для перемещения персонажа.
Функция clickAccepted() вращает персонажа для ходьбы в направлении, которое вы щелкнули, и затем начинает движение персонажа в этом направлении.
determineFall()
Когда персонаж настроен для движения, функция moveCharacter() определяет следующий шаг персонажа и перемещает его в памяти. Если она обнаруживает, что персонаж достиг цели назначения, она вызывает determineFall(). Эта функция приказывает плитке (той, которую персонаж только что покинул) упасть. Затем она проверяет окружающие плитки, чтобы проверить, была ли какая-либо из них дестабилизирована достаточно, чтобы упасть. (Помните, что плитка должна, по крайней мере, одной полной стороной касаться другой плитки, чтобы оставаться в воздухе.)
Ниже приводится эта функция:
1 function determineFall(){
2 var x =world