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 @@
+