diff --git a/4.1/игра.html b/4.1/игра.html index da16f3d..3eaef90 100644 --- a/4.1/игра.html +++ b/4.1/игра.html @@ -27,6 +27,7 @@ + diff --git a/4.1/игра/075.Анимация.js b/4.1/игра/075.Анимация.js new file mode 100644 index 0000000..22fdfad --- /dev/null +++ b/4.1/игра/075.Анимация.js @@ -0,0 +1,68 @@ + //let параметры = анимации.задано[анимация]; +function Анимация(элемент, параметры) +{ + this.запустить = function() + { + let п = параметры; + let воспроизведений = Number(п["воспроизведений"]); + 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"]); + + if ( + воспроизведений == null || + скорость == null || + к0 == null || + к1 == null || + д0 == null || + д1 == null || + д2 == null || + д3 == null + ) { + return; + } + + let ширинаДиапазона = Math.abs(д2 - д0); + let высотаДиапазона = Math.abs(д3 - д1); + let ширинаКадра = Math.abs(к0); + let высотаКадра = Math.abs(к1); + let кадровПоГоризонтали = Math.floor(ширинаДиапазона / ширинаКадра); + let кадровПоВертикали = Math.floor(высотаДиапазона / высотаКадра); + + this.номерКадра = 0; + this.размерКадра = [к0, к1]; + this.поГоризонтаи = кадровПоГоризонтали > кадровПоВертикали; + this.колвоКадров = this.поГоризонтали ? кадровПоГоризонтали : кадровПоВертикали; + // Возможно, в будущем стоит заменить частные таймеры на один общий. + // Вдруг в браузерах есть ограничение на количество таймеров от одной страницы. + this.таймер = setInterval(() => { this.анимировать(); }, скорость); + }; + + this.остановить = function() + { + if (this.таймер) + { + clearInterval(this.таймер); + } + }; + + this.анимировать = function() + { + this.номерКадра += 1; + if (this.номерКадра >= this.колвоКадров) + { + this.номерКадра = 0; + } + let x = this.поГоризонтали ? this.номерКадра * this.размерКадра[0] : 0; + let y = this.поГоризонтали ? 0 : this.номерКадра * this.размерКадра[1]; + + элемент.style.backgroundPosition = `${x}px ${y}px`; + }; + + // Конструктор. + this.запустить(); +} diff --git a/4.1/игра/080.Анимации.js b/4.1/игра/080.Анимации.js index 5788953..18826f9 100644 --- a/4.1/игра/080.Анимации.js +++ b/4.1/игра/080.Анимации.js @@ -3,6 +3,7 @@ function Анимации(события) this.создать = function() { this.задано = {}; + this.анимации = {}; }; this.обработатьКлюч = function(ключ, путь, значение)