function Слежение(корень, изображения, тела, объекты)
{
    this.создать = function()
    {
        this.умолчание = {
            смещение: [0, 0],
            скорость: 1,
        };
        this.задано = {};
    };

    this.обработатьКлюч = function(ключ, путь, значение)
    {
        var имя = путь[1];
        var свойство = путь.slice(2).join(".");
        if (!this.задано[имя])
        {
            this.задано[имя] = {};
        }
        this.задано[имя][свойство] = значение;
    };

    this.обновить = function()
    {
        for (var имя in this.задано)
        {
            var за = this.задано[имя];
            if (имя == "камера")
            {
                this.расположитьЭлемент(корень, за, this.расположениеКамеры);
            }
            else
            {
/**///console.debug("слежение.обновить эл", имя);
                var изо = изображения.элементы[за["изображение"]];
                this.расположитьЭлемент(изо, за);
            }
        }
    };

    this.расположитьЭлемент = function(элемент, за, формула)
    {
        var тело = null;
        if (за["объект"])
        {
            тело = объекты.тела[за["объект"]];
        }
        else if (за["тело"])
        {
            тело = тела.тела[за["тело"]];
        }

        var ум = this.умолчание;

        // Параметры.
        var скорость = за.скорость ? за.скорость : ум.скорость;
        var смещениеX = за["смещение.0"] ? за["смещение.0"] : ум.смещение[0];
        var смещениеY = за["смещение.1"] ? за["смещение.1"] : ум.смещение[1];

        // Текущая позиция.
        var x0 = 0;
        if (элемент.dataset.слежениеX)
        {
            x0 = элемент.dataset.слежениеX;
        }
        var y0 = 0;
        if (элемент.dataset.слежениеY)
        {
            y0 = элемент.dataset.слежениеY;
        }

        // Целевая позиция.
        var x1 = тело.position.x + смещениеX;
        var y1 = тело.position.y + смещениеY;
/**///console.debug("x0/y0:", x0, y0, "x1/y1:", x1, y1);

        // Преобразование целевой позиции.
        // Сейчас лишь для камеры.
        if (формула)
        {
            var итог = формула(x1, y1);
            x1 = итог[0];
            y1 = итог[1];
        }

        // Устанавливаемая плавно позиция.
        var x = this.lerp(x0, x1, скорость);
        var y = this.lerp(y0, y1, скорость);

        элемент.dataset.слежениеX = x;
        элемент.dataset.слежениеY = y;
        элемент.style.transform = `translate(${x}px, ${y}px)`;
    };

    this.расположениеКамеры = function(x, y)
    {
        return [
            window.innerWidth / 2 - x,
            window.innerHeight / 2 - y,
        ];
    };

    this.lerp = function(v0, v1, t) {
        // Убираем мельтешение.
        var delta = Math.abs(v0 - v1);
        if (delta < 1) {
            return v0;
        }
        return v0 * (1 - t) + v1 * t;
    };

    // Конструктор.
    this.создать();
};