мир.игрок = { задано: {}, прыжок: { статус: 0, время: new Date(), скоростьОтсутствия: 0.0001, }, приземление: { скорость: 0, }, тело: null, }; // // // // мир.ключники.push(function(ключ, путь, значение){ if (!ключ.startsWith("игрок")) { return; } var свойство = путь.slice(1).join("."); мир.игрок.задано[свойство] = значение; }); // // // // мир.игрок.обновить = function() { var тело = мир.объекты.тела[мир.игрок.задано.объект]; if (!тело) { тело = мир.тела.тела[мир.игрок.задано.тело]; } мир.игрок.тело = тело; if (!мир.игрок.тело) { return; } мир.игрок.переместить(); мир.игрок.отслеживатьПрыжкиПриземления(); }; // // // // мир.игрок.переместить = function() { var к = [ мир.игрок.задано["клавиши.0"], мир.игрок.задано["клавиши.1"], ]; var влево = (мир.ввод.клавиши[к[0]] == true); var вправо = (мир.ввод.клавиши[к[1]] == true); var скоростьГ = мир.игрок.задано["скорость.0"]; var скоростьX = 0; var скоростьВ = мир.игрок.задано["скорость.1"]; var скоростьY = (мир.игрок.прыжок.статус == 1) ? -скоростьВ : мир.игрок.тело.velocity.y; if (влево) { скоростьX = -скоростьГ; } else if (вправо) { скоростьX = скоростьГ; } Matter.Sleeping.set(мир.игрок.тело, false); Matter.Body.setVelocity(мир.игрок.тело, { x: скоростьX, y: скоростьY }); }; // // // / мир.игрок.отслеживатьПрыжкиПриземления = function() { if (мир.игрок.прыжок.статус == 1) { мир.игрок.прыжок.статус = 2; мир.события.уведомить("игрок в прыжке"); } var нетДвижения = (Math.abs(мир.игрок.тело.velocity.y) < мир.игрок.прыжок.скоростьОтсутствия); var клавиша = мир.игрок.задано["клавиши.2"]; var вверх = (мир.ввод.клавиши[клавиша] == true); if ( мир.игрок.прыжок.статус == 0 && вверх && нетДвижения ) { мир.игрок.прыжок.статус = 1; мир.игрок.приземление.скорость = 0; мир.события.уведомить("игрок начал прыжок"); } if (мир.игрок.прыжок.статус != 2) { return; } var скорость = мир.игрок.тело.velocity.y; if (скорость > мир.игрок.приземление.скорость) { мир.игрок.приземление.скорость = скорость; } var сейчас = new Date(); var прошло = сейчас - мир.игрок.прыжок.время; if ( (прошло > 20) && нетДвижения ) { мир.игрок.прыжок.время = сейчас; мир.игрок.прыжок.статус = 0; мир.события.уведомить("игрок приземлился"); } };