движение

This commit is contained in:
2021-08-10 15:50:27 +03:00
parent 22846b7a46
commit 45d6318a33
4 changed files with 105 additions and 17 deletions

97
200.движение.js Normal file
View File

@@ -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.создать();
}