そらいろさんぽ

個人で開発したアプリやウェブサイトの情報をまとめたブログです

アバターアニメーション(スプライトシート)

アバターアニメーション(スプライトシート)

こんにちは。そらのくろうさぎです。

前回の連番PNGアニメーションに続き、今回はスプライトシートを使ったアバターアニメーションを作成しました。

スプライトシートを使うことでアニメーションのコマを1枚の画像にまとめられるため、keyframesで背景画像の表示領域を更新するだけでアニメーションのコマ画像を切り替えられます。 前回の力技とは違い、今回はCSS3の仕様に沿ったコードでアバターアニメーションになりますので、現行のぼほすべてのブラウザで動作を確認することが出来ます。

動作ブラウザ

Safari(快適)
Chrome(快適)
InternetExplorer10以降(快適)
Firefox(快適) AndroidChrome(等倍は快適)
Android標準ブラウザ(等倍は快適)
※PC・モバイルどちらもほぼ快適に動作します。

スプライトシート

f:id:soranokurousagi:20150722172859p:plain
上のスプライトシートを使います。

アニメーションの設定

animationプロパティを設定します。
前回の連番PNGと同じ設定を使用します。

-webkit-animation: AvatarAnimation 1.5s step-start infinite 0s normal;  
-webkit-animation-play-state: running;

/* Firefoxのベンダープレフィックスを追加 */
-moz-animation: AvatarAnimation 1.5s step-start infinite 0s normal;
-moz-animation-play-state: running;

/* CSS3のプロパティを追加 */
animation: AvatarAnimation 1.5s step-start infinite 0s normal;
animation-play-state: running;

キーフレームの設定

アニメーションのキーフレームを設定します。
background-positionでコマごとの表示領域を設定します。

@-webkit-keyframes AvatarAnimation {
    0% { background-position: 0px 0px; }
    3% { background-position: -200px 0px; }
    6% { background-position: -400px 0px; }
    ・
    ・
    ・
    100% { background-position: 0px 0px; }
}

/* Firefoxのベンダープレフィックスを追加 */
@-moz-keyframes AvatarAnimation {
    0% { background-position: 0px 0px; }
    3% { background-position: -200px 0px; }
    6% { background-position: -400px 0px; }
    ・
    ・
    ・
    100% { background-position: 0px 0px; }
}

/* CSS3のプロパティを追加 */
@keyframes AvatarAnimation {
    0% { background-position: 0px 0px; }
    3% { background-position: -200px 0px; }
    6% { background-position: -400px 0px; }
    ・
    ・
    ・
    100% { background-position: 0px 0px; }
}

HTMLタグの定義

連番PNGと同じタグを使用します。

<div id="Avatar">
    <p>
        AvatarView
    </p>
</div>    

動作確認

まとめ

スプライトシートはとても汎用性が高く、webブラウザだけではなくアプリケーションにもアニメーションを組み込むことが出来ます。 アニメーション処理も非常に軽く、モバイルブラウザ用のアバター表示にも最適かもしれません。 ただ、Androidの場合は機種ごとに動作が異なることがありますので、実機での検証は十分に行いましょう。 Android標準ブラウザではCSSよりもJavascriptの方が処理が軽くなることが多いようです。