<script>
var canvas;
var ctx;
//X軸の位置が変更できるようにXの値を入れる変数を用意する
var mx = 20;
//移動の向きに関する値を入れる変数
var dx = 1;
window.onload = function(){
canvas = document.querySelector("#canvas");
ctx = canvas.getContext("2d");
setInterval(draw, 20);
};
function draw(){
ctx.fillStyle = "white";
ctx.fillRect(0, 0, 400, 300);
ctx.beginPath();
ctx.moveTo(mx, 20);
ctx.lineTo(mx, 40);
ctx.lineTo(mx + 20, 40);
ctx.lineTo(mx + 20, 20);
ctx.lineTo(mx, 20);
ctx.strokeStyle = "blue";
ctx.stroke();
//mxにdxを加える
mx = mx + dx;
//右端は400pxになるので、mxが400よりも大きければ右端にいると見なす
if(mx > 400){
//向きの値に-1をかけて、逆向きの指示にする。次のdrawの実行から有効
dx = -1 * dx;
}
}
</script>mxの中の値を見て、箱が右端にいることが分かれば、向きdxの値の符号を逆にする。この処理により、
箱が右端に到達したら、向きを逆にして、移動を開始します。次に左端に到達したら先ほどと同様にフェードアウトしてしまうので、左端でも折り返す処理を追加します。
function draw(){
ctx.fillStyle = "white";
ctx.fillRect(0, 0, 400, 300);
ctx.beginPath();
ctx.moveTo(mx, 20);
ctx.lineTo(mx, 40);
ctx.lineTo(mx + 20, 40);
ctx.lineTo(mx + 20, 20);
ctx.lineTo(mx, 20);
ctx.strokeStyle = "blue";
ctx.stroke();
//mxにdxを加える
mx = mx + dx;
if(mx < 0 || mx > 400){
//向きの値に-1をかけて、逆向きの指示にする。次のdrawの実行から有効
dx = -1 * dx;
}
}mxが左端に到達、つまりは0以下になった時も逆向きにするという処理を追加して
箱が往復し続けるアニメーションができました。Y軸でも同様の処理を追加すると箱が縦横無尽に移動するアニメーションになります。
<script>
var canvas;
var ctx;
var mx = 20;
var my = 20;
var dx = 1;
var dy = 1;
window.onload = function(){
canvas = document.querySelector("#canvas");
ctx = canvas.getContext("2d");
setInterval(draw, 20);
};
function draw(){
ctx.fillStyle = "white";
ctx.fillRect(0, 0, 400, 300);
ctx.beginPath();
ctx.moveTo(mx, 20);
ctx.lineTo(mx, 40);
ctx.lineTo(mx + 20, 40);
ctx.lineTo(mx + 20, 20);
ctx.lineTo(mx, 20);
ctx.strokeStyle = "blue";
ctx.stroke();
mx = mx + dx;
my = my + dy;
if(mx < 0 ||mx > 400){
//向きの値に-1をかけて、逆向きの指示にする。次のdrawの実行から有効
dx = -1 * dx;
}
//Y軸の下の端は300なので、0と300を判断する
if(my < 0 ||my > 300){
//向きの値に-1をかけて、逆向きの指示にする。次のdrawの実行から有効
dy = -1 * dy;
}
}
</script>


0 件のコメント:
コメントを投稿