function Движение(ключники) { this.создать = function() { this.задано = {}; var тут = this; ключники.push(function(ключ, путь, значение) { if (!путь[0].startsWith("движение")) { return; } тут.обработатьКлюч(ключ, путь, значение); }); }; this.обработатьКлюч = function(ключ, путь, значение) { var имя = путь[1]; var свойство = путь.slice(2).join("."); if (!this.задано[имя]) { this.задано[имя] = {}; } this.задано[имя][свойство] = значение; }; this.обновить = function() { for (var имя in this.задано) { var значения = this.задано[имя]; for (var свойство in значения) { if (свойство.startsWith("объект")) { var объект = значения[свойство]; this.передвинуть(объект, значения); } } } }; this.передвинуть = function(объект, значения) { var тело = мир.объекты.тела[объект]; var скоростьX = значения["скорость.0"]; var скоростьY = значения["скорость.1"]; var началоX = значения["x.0"]; var конецX = значения["x.1"]; var началоY = значения["y.0"]; var конецY = значения["y.1"]; if ( !тело || (скоростьX == null) || (скоростьY == null) || (началоX == null) || (началоY == null) || (конецX == null) || (конецY == null) ) { return; } if (!тело.скоростьX) { тело.скоростьX = скоростьX; } if (!тело.скоростьY) { тело.скоростьY = скоростьY; } if (тело.position.x < началоX) { тело.скоростьX = скоростьX; } else if (тело.position.x > конецX) { тело.скоростьX = скоростьX * -1; } if (тело.position.y < началоY) { тело.скоростьY = скоростьY; } else if (тело.position.y > конецY) { тело.скоростьY = скоростьY * -1 * мир.физика.движок.gravity.y; } Matter.Sleeping.set(тело, false); Matter.Body.setVelocity(тело, { x: тело.скоростьX, y: тело.скоростьY }); }; // Конструктор. this.создать(); }