Canvas를 사용하여 공을 자유 낙하
공 자유 낙하 HTML
<canvas id="myCanvas" width="480" height="320"></canvas>
<canvas>
요소에 모든 것을 그립니다.그리기 준비
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var y = 30; //距離
var g = 9.8; //重力加速度
var v = 0.0; //速度
var t = 0.15; //時間
var e = -0.7; //反発係数
getElementById
를 사용하여 요소를 가져옵니다. 또한 2D 그리기 컨텍스트를 ctx
변수에 저장합니다.공 그리기
function drawBall() {
ctx.beginPath();
ctx.arc(canvas.width/2, y , 30, 0, Math.PI*2, false);
ctx.fillStyle = "rgba(240, 240, 240, 0.8)";
ctx.fill();
ctx.closePath();
}
공을 그릴 때는
beginPath()
메소드와 closePath()
메소드 사이에 씁니다.arc()
메소드의 매개변수는 다음과 같습니다.arc(円の中心のx座標, 円の中心のy座標, 半径, 円の開始角度, 円の終了角度, 描く方向)
공을 자유 낙하시키기 때문에, y 좌표를 변수 y
로 하고 있습니다.y
의 초기값이 30인 것은 arc()
메소드는 원의 중심의 y 좌표를 지정하기 때문에, 볼이 모두 표시되도록(듯이) 반경분 어긋나 있습니다.fillStyle
속성에 지정된 색상을 fill()
메서드를 사용하여 채웁니다.공을 자유 낙하
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawBall();
v += g * t;
y += v * t;
if (y > canvas.height - 30) {
y = canvas.height - 30;
v *= e;
}
requestAnimationFrame(draw);
}
중력 가속도의 공식을 사용합니다.
g = 9.8m/s2
v = g*t
즉, t의 값을 크게 하면 할수록 낙하 속도는 빨라집니다.
if 문은 공 위치의
y
좌표가 캔버스 높이보다 높으면 속도에 반발 계수를 곱하여 공을 튕겨냅니다.canvas.height
부터는 원의 반경분 30을 당겨 공이 모두 표시되도록 하고 있습니다.ctx.clearRect(0, 0, canvas.width, canvas.height);
는 프레임 후에 그리기를 삭제하고 있습니다.clearRect()
메소드의 매개변수는 다음과 같습니다.clearRect(四角形の左上端のx座標, 四角形の左端のy座標, 四角形の右下端のx座標, 四角形の右下端のy座標)
이 방법을 쓰지 않으면 볼의 궤적이 남아 버립니다.
Reference
이 문제에 관하여(Canvas를 사용하여 공을 자유 낙하), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ayana_shi/items/c88dece936c7893b3543텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)