JS:ボール2つのアニメーション解答例

JavaScript

index.html

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width,user-scalable=yes">
	<script type="text/javascript" src="main.js"></script>
	<title>JavaScript:canvas壁に当たるとはね返る【ボール2つ】</title>
</head>
<body>
	<canvas id="canvas" width="500" height="500"></canvas>
</body>
</html>

main.js

let canvas = null;  // キャンバス
let g = null;       // 描画コンテキスト

// ボール1
let ball1 = {
    x: 100,
    y: 50,
    r: 30,
    vx: 5,
    vy: 3,
    color: "forestgreen",
};

// ボール2
let ball2 = {
    x: 200,
    y: 220,
    r: 50,
    vx: 4,
    vy: -5,
    color: "steelblue",
};

//let x, y, r;	    // ●のx座標、y座標、半径
//let vx, vy;		// x方向の速度、y方向の速度

let balls = [];

function drawAnim(){
    // 背景をグレーに
    g.fillStyle = "#ddd";
    g.fillRect(0, 0, canvas.width, canvas.height);
    // ballを描画
    for(let ball of balls){
        g.beginPath();
        g.fillStyle = ball.color;	// 塗りつぶす色
        g.arc(ball.x, ball.y, ball.r, 0, Math.PI*2, false);
        g.fill();
        // ●の移動
        ball.x += ball.vx;
        ball.y += ball.vy;
        // 壁に当たったら跳ね返る(●のxy座標は中心点のため、半径を考慮)
        if(ball.x < 0+ball.r || ball.x > canvas.width-ball.r){
            ball.vx = -ball.vx;
        }
        if(ball.y < 0+ball.r || ball.y > canvas.height-ball.r){
            ball.vy = -ball.vy;
        }
    } 
    // 再帰呼び出しでアニメーションさせる
    requestAnimationFrame(drawAnim);
}

window.addEventListener("load", ()=>{
    // キャンバスの初期設定
    canvas = document.getElementById("canvas");
    g = canvas.getContext("2d");
    // 描画するballの初期設定
    //ball.x = 100; ball.y = 50; ball.r = 30;
    //ball.vx = 5; ball.vy = 3;
    balls.push(ball1);
    balls.push(ball2);    
    // アニメーション開始
    drawAnim();
});

コメント

タイトルとURLをコピーしました