Обратите внимание, что когда условия для выполнения прыжка наступили (то есть, условие в строке 15 полностью выполнено), hero.inAir установлено в true. Мы сохраняем этот признак, когда герой находится в воздухе и когда он находится на поверхности.
В строках 25-29 мы проверяем, нажата ли стрелка вниз. Если нажата, то мы приказываем герою наклонится, вызывая hero.crouch(); в противном случае мы вызываем hero.uncrouch(). Если вы думаете вперед, вы можете задаться вопросом, сочетается ли это со сценарием скольжения под платформой и последующим выпрямлением, как упоминалось выше. Это не оказывает никакого эффекта, потому что мы проверяем это условие в функции, которая вызывается после функции platformDetect(). Если мы обнаруживаем, что герой должен по-прежнему наклоняться, то мы вызываем hero.crouch() и игрок никогда не увидит героя стоящим (как и следует).
platformDetect()
Если вы тратите время на понимание любой функции в этой игре, давайте это будет именно эта. Она довольно длинна (77 строк), но не слишком сложна. Как упоминалось ранее в этой главе, существует много ситуаций, которые мы должны принять во внимание, когда наш герой сталкивается с платформой. Эта функция делает все это. Она не только обнаруживает, столкнулся ли он с платформой, но также определяет свойства платформы (такие как твердость, проницаемость, подвижность) и создает соответствующую реакцию героя. Эта функция представлена ниже:
1 function platformDetect(){
2 var oldOnPlatform =hero.onPlatform;
3 var onPlatform =false;
4 for (var i =0;i<game.platforms.column.length;++i){
5 var platform =game.platforms.column [i ];
6 var px =platform.x;
7 var py =platform.y;
8 var pw =platform.width;
9 var ph =platform.height;
10 var type =platform.type;
11 for (var iteration =1;iteration<=
.game.totalIterations;++iteration){
12 hero.tempx =hero.x+
.(hero.xmov/game.totalIterations)*iteration;
13 hero.tempy =hero.y+
.(hero.ymov/game