Лишь когда герой перемещается со скоростью выше определенного уровня, нам нужен более чем один цикл. Так свойство, которое управляет числом циклов, game.totalIterations, контролируется в каждом кадре функцией createTempPosition(). Эта функция изменяет game.totalIterations на основе скорости героя.
Если условие в строке 14 выполняется, то герой сталкивается с платформой. В этом месте должны быть проверены другие условия, для точного решения, что нужно сделать с героем. Если условие в строке 16 выполняется, то герой приземляется на верхнюю часть платформы. Мы также проверяем, движется ли эта платформа, и если да, то немного перемещаем героя.
В строке 29 мы проверяем, не наталкивается ли герой на низ платформы. Если это так, то мы также проверяем, содержит ли платформа собираемый предмет, и если да, то мы делаем его видимым.
В строках 41 и 51 мы проверяем, сталкивается ли герой с левым или правым краем платформы. Если это так, и он не наклоняется, мы перемещаем его в пределы платформы. Если он наклонился, мы удерживаем его наклонившимся и создаем ему скольжение от одной стороны до другой (смотри строки 66-72).
Если условие в строке 73 выполняется, герой находился слева от платформы без прыжка. Тогда мы устанавливаем свойство hero.inAir в true.
baddyDetection()
Эта функция вызывается в каждом кадре. Она определяет, произошло ли столкновение между героем и врагом, используя метод hitTest() объекта клип.
1 function baddyDetection(){
2 for (var i =0;i<game.baddies.length;++i){
3 var baddy =game.baddies [i ];
4 if (hero.clip.hitTest(baddy.clip.hitArea)){
5 if (hero.ymov>game.gravity){
6 //враг раздавлен
7 hero.tempy =hero.y;
8 hero.ymov =-10;
9 killBaddy(baddy,i);
10 }else {
11 //герой умер
12 hero.ymov =-20;
13 hero.xmov =15;
14 hero.die();
15 }
16 }
17 }
18 }
Каждый враг представлен объектом. Эти объекты хранятся в массиве baddies. В этой функции мы проходим в цикле по массиву baddies, проверяя столкновение между героем и каждым врагом