イメージをタイルシートにするとパラパラ漫画風のアニメーションを作成できます。
簡単な例で試してみましょう。上のタイルシートの中の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); } }
コメントを投稿するにはログインしてください。