From 45d6318a3308893e2372de3735c1ab98374f131c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Tue, 10 Aug 2021 15:50:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=B2=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 200.движение.js | 97 ++++++++++++++++++++++++++++++++++++++++ 700.пуск.js | 2 + 800.пример.json.js | 22 +++------ index.html | 1 + 4 files changed, 105 insertions(+), 17 deletions(-) create mode 100644 200.движение.js diff --git a/200.движение.js b/200.движение.js new file mode 100644 index 0000000..e31b465 --- /dev/null +++ b/200.движение.js @@ -0,0 +1,97 @@ +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.создать(); +} diff --git a/700.пуск.js b/700.пуск.js index ff78c59..b400655 100644 --- a/700.пуск.js +++ b/700.пуск.js @@ -5,6 +5,7 @@ function Пуск() мир.физика.создать(); мир.столкновения.создать(); мир.звуки = new Звуки(мир.ключники, мир.события); + мир.движение = new Движение(мир.ключники); this.обновить(); }; @@ -15,6 +16,7 @@ function Пуск() мир.игрок.обновить(); мир.слежение.обновить(); мир.маскиПрыжков.обновить(); + мир.движение.обновить(); var тут = this; requestAnimationFrame(function() { тут.обновить(); diff --git a/800.пример.json.js b/800.пример.json.js index 1f069d9..974de07 100644 --- a/800.пример.json.js +++ b/800.пример.json.js @@ -463,7 +463,7 @@ console.debug("событие", событие); мир.разобрать({ объекты: { паук1: { - x: 1180, + x: 680, y: 300, ширина: 30, вид: { @@ -481,24 +481,12 @@ console.debug("событие", событие); событие: "игрокПаук1", }, }, - постоянноеДвижение: { + движение: { паук1: { объекты: ["паук1"], - скорость: [0, 1], - x: [1180, 1180], - y: [300, 500], + скорость: [0.7, 1], + x: [610, 1080], + y: [350, 450], }, }, }); - - -// Двигать паука руками. - -setInterval( - function() { - var тело = мир.объекты.тела["паук1"]; - Matter.Sleeping.set(тело, false); - Matter.Body.setVelocity(тело, { x: 0, y: 0.2 }); - }, - 10 -); diff --git a/index.html b/index.html index 2ab99b2..33bde83 100644 --- a/index.html +++ b/index.html @@ -72,6 +72,7 @@ +