イメージをタイルシートにするとパラパラ漫画風のアニメーションを作成できます。

簡単な例で試してみましょう。上のタイルシートの中の2つのイメージとdrawImage()メソッドを使用してアニメーションを作成します。
2枚のイメージ画像を交互に表示するとgifアニメのような効果が得られます。
その方法として、2枚のイメージ画像に番号を付けます。1枚目は0、2枚目は1とします。0と1を一定時間で入れ替えるようにすればよいのです。
この仕組みをプログラム的に書くと以下のようになります。
var count = 0;
counter++;
if(counter > 1){
counter = 0;
}
次にタイルシートのそれぞれの画像の表示したい部分をx座標、y座標で指定します。1行だけのタイルシートならx座標の指定だけでOKです。たとえば32pxの画像が横に並んでいる場合だと最初の画像はx座標0pxで2枚目の画像はx座標32pxとなります。これをプログラム的に書くと先ほどの counterの値「1」か「0」に32pxを掛けてやります。
32*counter;
一定時間で動作を繰り返すにはsetInterval()メソッドを使います。
setInterval(drawScreen,100)
drawScreenは自分で作成した関数になります。100ミリ秒ごとにdrawScreen()に設定した内容を実行します。
以下は実際の例です。色の違う花を交互に表示するものです。
HTMLのソースです。
<div> <canvas id="canvas" width="200" height="200"> Your browser does not support the HTML 5 Canvas. </canvas> </div>
JavaScriptのソースです。
window.addEventListener('load', eventWindowLoaded, false);
function eventWindowLoaded() {
canvasApp();
}
function canvasApp(){
if (!canvas || !canvas.getContext) {
return;
}else{
var theCanvas = document.getElementById('canvas');
var context = theCanvas.getContext('2d');
}
var counter=0;
var myFlowers=new Image();
myFlowers.addEventListener('load', eventFlower, false);
myFlowers.src="flower4.png";
function eventFlower() {
startUp();
}
function drawScreen() {
//draw a background so we can wee the Canvas edges
context.fillStyle="#00ffff";
context.fillRect(0, 0, 500, 500);
context.drawImage(myFlowers, 128*counter, 0, 128, 128, 30, 30, 128, 128);
counter++;
if (counter >1) {
counter=0;
}
}
function startUp(){
setInterval(drawScreen, 700);
}
}

コメントを投稿するにはログインしてください。