見出し画像

JavaScriptで画面更新 - ループの方法。

例えばボールが右に動くということを考えるとき、画面上では最初に表示さえていたとこ頃から右側に表示され、元の位置のボールを消すことで動いたと感じることができます。

この表現は連続する定期的な画面の更新によって行います。

1 ある位置にボールを表示。
2 ボールを移動した位置に表示。これと同時に最初位置にあったボールを消す。

この動作により右に移動したと感じることができます。

動画などは連続した映像の記録により上記を表現しています。連続する映像を画面の更新という操作で実現していきます。以下を参考に実際に動かしてみます。

画面を表示します。

var canvas = document.getElementById("canvasId");
var ctx = canvas.getContext("2d");

今回はボール画像を動かします。

ボールの画像を変数に入れてつかうるようにします。

const img = new Image();
img.src = 'ball.png';

最初に表示する座標

var x = 0;
var y = 200;

動かす幅。x方向に"2"動かします。

var dx = 2;
var dy = 0;

そして動かす関数。

function draw() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  ctx.drawImage(img, x, y, 60, 30);
  x += dx;
  y += dy;
}

まず、画面を消します。

ctx.clearRect(0, 0, canvas.width, canvas.height);

そして描画

ctx.drawImage(img, x, y, 60, 30);

x += dx;
y += dy;

画像の座標を更新のたびに"+"増やしていきます。この場合は"x"のみ"2"ずつ増えていくので右の方向へ更新のたびに動くように見えます。

画面を消してボウルを表示。 →   画面を消してボウルを表示(座標変更)

この操作でもとの画像が’消えて右側へ座標が変わったボールが表示されます。右へ移動したように見えます。

関数を実行します。

setInterval(draw, 10);

10ミリ秒ごとにdraw関数を実行しなさい。という命令です。画面更新のたびに"座標の変更して表示、同時に前の画像を消す"を繰り返し実行します。


今では便利な関数があります。

window.requestAnimationFrame();

この関数を使って実装しなおします。

function draw() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.drawImage(img, x, y, 100, 50);
  x += dx;
  y += dy;
  window.requestAnimationFrame(draw);
}

draw();



この記事が気に入ったらサポートをしてみませんか?