javascript(テトリス009_テトリスへのanime.jsの使用)
■Anime.jsでアニメーションを追加する。
前回まででテトリスのコードはできたので、装飾としてAnime.js(Anime.min.js)でアニメーションを追加する。対象の動作は、行が揃って消えるところと終了時。
追加コードは下の通り。BoardClassの中のメソッドとして追加し、gameendAnimeが終了時、deleteAnimeが1、2、3行を消すとき、deleteAnime4Lineが4行を消すとき。
gameendAnime(targetCells) {
let cells = [];
for (let i of targetCells) {
let temp = document.querySelector('.squ' + i);
cells.push(temp);
}
anime({
targets: cells,
backgroundColor: '#666',
delay: anime.stagger(80, { start: 400 }),
});
}
deleteAnime(targetCells) {
let cells = [];
for (let i of targetCells) {
let temp = document.querySelector('.squ' + i);
cells.push(temp);
}
anime({
targets: cells,
backgroundColor: '#FFF',
delay: anime.stagger(100, { grid: [1, 10], from: 'center' }),
complete: function () {
BoardClass.synchronizeBoard();
}
});
}
deleteAnime4Line(targetCells) {
let cells = [];
for (let i of targetCells) {
let temp = document.querySelector('.squ' + i);
cells.push(temp);
}
let tl1 = anime.timeline({
targets: cells,
rotateY: [
{ value: 90, easing: 'easeOutSine', duration: 300 },
{ value: 0, easing: 'easeInOutQuad', duration: 300 }
],
delay: anime.stagger(100, { grid: [2, 10], from: 'center' })
});
tl1.add({
backgroundColor: '#FFF',
complete: function () {
BoardClass.synchronizeBoard();
}
});
}
今まで見てきたAnime.jsを使っているだけなので新しいものはあまりない。
4行消す際のコードをいじっている時に、アニメーションを動かした後、セル間の隙間ができることがあった(下の赤枠)。ピースを改めて積み上げたり、ブラウザ機能で画面をズームして戻したりすると隙間は消えるけど、どうにかならないかいろいろ試したところ、durationを300にしたら隙間はできなくなった。隙間ができる時はdurationは360だった。
上が「duration: 360」で下が「duration: 300」。上のものは隙間があることが分かる。
他のアニメーションを含めた最終的な実行画面が下のもの。
これでテトリスのコードは終わりにする。