diff --git a/3.3/общее/200.функции.js b/3.3/общее/200.функции.js index c3687d6..cca058c 100644 --- a/3.3/общее/200.функции.js +++ b/3.3/общее/200.функции.js @@ -27,6 +27,24 @@ var мир = {}; return new TextDecoder("utf-8").decode(байты); }; +мир.задатьПолныйКлюч = function(словарь, полныйКлюч, значение) { + var путь = полныйКлюч.split("."); + var пройти = путь.length - 1; + var вложенность = словарь; + for (var номер = 0; номер < пройти; ++номер) + { + var ключ = путь[номер]; + if (!(ключ in вложенность)) + { + вложенность[ключ] = {}; + вложенность = вложенность[ключ]; + } + } + // Значение в конце вложенности. + var ключ = путь[пройти]; + вложенность[ключ] = значение; +}; + мир.назначитьКнопкамСобытия = function(события, список) { for (var номер in список) diff --git a/3.3/проигрыватель/140.Тела.js b/3.3/проигрыватель/140.Тела.js index 0936569..43621bf 100644 --- a/3.3/проигрыватель/140.Тела.js +++ b/3.3/проигрыватель/140.Тела.js @@ -7,7 +7,6 @@ function Тела(события, физмир) y: 0, ширина: 40, высота: 20, - угол: 0, часть: false, физика: { isStatic: true, diff --git a/3.3/проигрыватель/160.Слежение.js b/3.3/проигрыватель/160.Слежение.js index 8a14c11..2c7de17 100644 --- a/3.3/проигрыватель/160.Слежение.js +++ b/3.3/проигрыватель/160.Слежение.js @@ -5,6 +5,7 @@ function Слежение(события, изображения, тела) this.умолчание = { смещение: [0, 0], скорость: 1, + предел: 0, }; this.задано = {}; события.подписать(this); @@ -15,8 +16,7 @@ function Слежение(события, изображения, тела) for (var имя in this.задано) { var за = this.задано[имя]; - var изо = изображения.элементы[за.изображение]; - this.расположитьЭлемент(изо, за); + this.расположитьИзображение(за); } }; @@ -36,7 +36,7 @@ function Слежение(события, изображения, тела) this.задано[имя][свойство] = значение; }; - this.расположитьЭлемент = function(элемент, за) + this.расположитьИзображение = function(за) { var тело = тела.тела[за.тело]; if (!тело) @@ -44,12 +44,14 @@ function Слежение(события, изображения, тела) return; } + var элемент = изображения.элементы[за.изображение]; var ум = this.умолчание; // Параметры. var скорость = за.скорость ? за.скорость : ум.скорость; var смещениеX = за["смещение.0"] ? за["смещение.0"] : ум.смещение[0]; var смещениеY = за["смещение.1"] ? за["смещение.1"] : ум.смещение[1]; + var предел = за.предел ? за.предел : ум.предел; // Текущая позиция. var x0 = 0; @@ -66,22 +68,26 @@ function Слежение(события, изображения, тела) // Целевая позиция. var x1 = тело.position.x + смещениеX; var y1 = тело.position.y + смещениеY; + // Radians -> Degrees. + var угол = тело.angle * 180 / Math.PI; // Устанавливаемая плавно позиция. - var x = this.lerp(x0, x1, скорость); - var y = this.lerp(y0, y1, скорость); + var x = this.lerp(x0, x1, скорость, предел); + var y = this.lerp(y0, y1, скорость, предел); элемент.dataset.слежениеX = x; элемент.dataset.слежениеY = y; - элемент.style.left = `${x}px`; - элемент.style.top = `${y}px`; + изображения.обновитьРасположение(за.изображение, x, y, угол); }; - this.lerp = function(v0, v1, t) { - // Убираем мельтешение. - var delta = Math.abs(v0 - v1); - if (delta < 1) { - return v0; + this.lerp = function(v0, v1, t, предел) { + // Убираем мельтешение в случае наличия предела. + if (предел) + { + var delta = Math.abs(v0 - v1); + if (delta < предел) { + return v0; + } } return v0 * (1 - t) + v1 * t; }; diff --git a/3.3/редактор/index.html b/3.3/редактор/index.html index 0e67f06..930626e 100644 --- a/3.3/редактор/index.html +++ b/3.3/редактор/index.html @@ -63,7 +63,7 @@ 3.3 - ??? + тела, слежение 3.2