diff --git a/6.0/игра/075.Анимация.js b/6.0/игра/075.Анимация.js index 9bdf11f..a0b6ecd 100644 --- a/6.0/игра/075.Анимация.js +++ b/6.0/игра/075.Анимация.js @@ -1,5 +1,28 @@ function Анимация(элемент, параметры) { + this.анимировать = function() + { + this.номерКадра += 1; + if (this.номерКадра >= this.колвоКадров) + { + this.номерВоспроизведения += 1; + this.номерКадра = 0; + if ( + this.колвоВоспроизведений > 0 && + this.номерВоспроизведения >= this.колвоВоспроизведений + ) { + this.идёт = false; + return; + } + } + + let x0 = this.началоДиапазона[0]; + let y0 = this.началоДиапазона[1]; + let x = this.поГоризонтали ? x0 + this.номерКадра * this.размерКадра[0] : x0; + let y = this.поГоризонтали ? y0 : y0 + this.номерКадра * this.размерКадра[1]; + элемент.style.backgroundPosition = `${x}px -${y}px`; + }; + this.запустить = function() { this.идёт = false; @@ -9,20 +32,14 @@ function Анимация(элемент, параметры) let скорость = Number(п["скорость"]); let к0 = Number(п["кадр.0"]); let к1 = Number(п["кадр.1"]); - let д0 = Number(п["диапазон.0"]); - let д1 = Number(п["диапазон.1"]); - let д2 = Number(п["диапазон.2"]); - let д3 = Number(п["диапазон.3"]); + let диапазоны = this.разобратьДиапазоны(); if ( воспроизведений == null || скорость == null || к0 == null || к1 == null || - д0 == null || - д1 == null || - д2 == null || - д3 == null + диапазоны == null ) { return; } @@ -34,6 +51,7 @@ function Анимация(элемент, параметры) let кадровПоГоризонтали = Math.floor(ширинаДиапазона / ширинаКадра); let кадровПоВертикали = Math.floor(высотаДиапазона / высотаКадра); + this.диапазоны = диапазоны; this.скорость = скорость; this.номерВоспроизведения = 0; this.колвоВоспроизведений = воспроизведений; @@ -57,27 +75,58 @@ function Анимация(элемент, параметры) this.номерИтерации = итерация; }; - this.анимировать = function() + this.разобратьДиапазон = function(номер) { - this.номерКадра += 1; - if (this.номерКадра >= this.колвоКадров) + var список = []; + for (var н = 0; н < 4; ++н) { - this.номерВоспроизведения += 1; - this.номерКадра = 0; - if ( - this.колвоВоспроизведений > 0 && - this.номерВоспроизведения >= this.колвоВоспроизведений - ) { - this.идёт = false; - return; + let ключ = `диапазон.${номер}.${н}`; + let значение = Number(параметры[ключ]); + if (значение) + { + список.push(значение); } } + if (список.length == 4) + { + return список; + } + return null; + }; - let x0 = this.началоДиапазона[0]; - let y0 = this.началоДиапазона[1]; - let x = this.поГоризонтали ? x0 + this.номерКадра * this.размерКадра[0] : x0; - let y = this.поГоризонтали ? y0 : y0 + this.номерКадра * this.размерКадра[1]; - элемент.style.backgroundPosition = `${x}px -${y}px`; + this.разобратьДиапазоны = function() + { + let ключи = Object.keys(параметры).sort(); + let префикс = "диапазоны"; + var значения = []; + for (var номер in ключи) + { + let ключ = ключи[номер]; + if (ключ.startsWith(префикс)) + { + let значение = Number(параметры[ключ]); + if (!isNaN(значение)) + { + значения.push(значение); + } + } + } + if (значения.length % 4 == 0) + { + var диапазоны = []; + let колво = значения.length / 4; + for (var д = 0; д < колво; ++д) + { + var диапазон = []; + for (var н = 0; н < 4; ++н) + { + диапазон.push(значения[д * 4 + н]); + } + диапазоны.push(диапазон); + } + return диапазоны; + } + return null; }; // Конструктор.