Анимация
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
<script src="общее/200.функции.js"></script>
|
||||
<script src="игра/050.Заголовок.js"></script>
|
||||
<script src="игра/070.Виды.js"></script>
|
||||
<script src="игра/075.Анимация.js"></script>
|
||||
<script src="игра/080.Анимации.js"></script>
|
||||
<script src="игра/100.Изображения.js"></script>
|
||||
<script src="игра/120.Физика.js"></script>
|
||||
|
||||
68
4.1/игра/075.Анимация.js
Normal file
68
4.1/игра/075.Анимация.js
Normal file
@@ -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.запустить();
|
||||
}
|
||||
@@ -3,6 +3,7 @@ function Анимации(события)
|
||||
this.создать = function()
|
||||
{
|
||||
this.задано = {};
|
||||
this.анимации = {};
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
|
||||
Reference in New Issue
Block a user