2. JavaScript 캔버스
javascript에서는 <canvas>라는 요소가 존재하는데 스크립트를 사용하여 그림을 그릴 수 있다
1. canvas로 도형 그려보기
html body 상에 canvas 요소를 주고 id를 부여한다.
<canvas id="myCanvas" width="400" height="400" ></canvas>
js 파일에서는 해당 element를 document.getElementById로 찾아서 변수에 저장한다.
javascript의 document란?
const canvas = document.getElementById("myCanvas");
canvas 위에 그림을 그리기 위해선 자바스크립트 context 오브젝트를 사용하면 된다
const context = canvas.getContext("2d"); // 그려주는 것에 대한 제어권을 설정
// CanvasRenderingContext2D (en-US) 객체를 생성한다
element.getContext() method는 캔버스의 드로잉 컨텍스트를 반환하며,
어떤 것을 그릴지 선택한다고 생각하면 된다(렌더링 타입을 정함)
간단한 직사각형을 그려보자
    context.beginPath();
    context.rect(0, 0, 400, 400); 
    context.fillStyle = "lightgray";
    context.fill();
    context.closePath();
rect는 직사각형을 그린다면 arc는 부채꼴을 그릴 수 있다
	context.beginPath();
	const arcRadius = 20; // 반지름
	// arc는 시작점으로 정해준곳이 중점이다
    // 각도 인자에서 radius를 사용하기 때문에 2 * Math.PI가 360도 회전이다
    context.arc(canvas.width / 2 , canvas.height / 2, arcRadius, 0 , 2 * Math.PI,); 
    context.fillStyle = "blue";
    context.fill();
    context.closePath();
2. canvas의 도형을 움직여보자
canvas에서 도형을 움직이는 것은 setInterval 함수를 이용해 일정시간마다 캔버스에 도형을 렌더함으로써 수행할 수 있다
    const canvas = document.getElementById("myCanvas");
	const context = canvas.getContext("2d");	
    let posX = canvas.width / 2 - 50;
    let posY = canvas.height / 2 - 50;
    function moveRect() {
      context.clearRect(0, 0, canvas.width, canvas.height); 
      // canvas를 clear해주는 역할을 하며 해당 명령이 없으면 기존에 그린것들이 남아있기에 도형이 이동하는 것이 아니라 옆으로 늘어나는것처럼 작동한다
      posX ++;
      context.beginPath();
      context.rect(posX, posY, 100, 100); 
      context.fillStyle = "blue";
      context.fill();
      context.closePath();
    }
    setInterval(moveRect,10);
위의 코드대로 하면 rect는 canvas를 벗어나 시야에서 사라지게 된다
이번에는 canvas 안쪽에서 arc가 다양한 속도의 왕복 운동을 할 수 있게 바꿔보자
이를 위해서 기능별로 함수를 구분하고 변수를 추가해줄 것이다
const canvas = document.getElementById("myCanvas");
const context = canvas.getContext("2d");
let arcPosX = canvas.width / 2; // 원의 중심 x축 좌표
let arcPosY = canvas.height / 2; // 원의 중심 y축 좌표
const arcRadius = 20;
// 처음 방향변수를 지정할 때는 "left", "right" 등으로 주고 특정 조건일 때 바뀌는 것으로 하려고 했으나 
// 1, -1로 하니 번거로운 작업을 할 필요 없어짐
let arcMvDirX = 1; // 원의 x축 방향
let arcMvDirY = 1; // 원의 y축 방향
let arcMvSpd = 2; // 원의 이동 속도
function update() 
{
    // 데이터 수정 function ex) 도형의 위치 이동
  
    // arc X축
    if(arcPosX < arcRadius) { //canvas의 왼쪽 끝에 원이 도착했을 때
        arcMvDirX = 1; // 방향을 오른쪽으로 바꾼다
      	arcMvSpd++; // 속도에도 변화를 줄 수 있다
    }
    else if(arcPosX > canvas.width - arcRadius) {
        arcMvDirX = -1;
      	arcMvSpd = 3;
    }
    // arc Y축
    if(arcPosY -arcRadius < 0) 
    {
        arcMvDirY = 1;
    }
    else if(arcPosY + arcRadius > canvas.height) 
    {
        arcMvDirY = -1;
    }
    arcPosX += arcMvDirX * arcMvSpd; // 방향 * 속력으로 속도를 정해줄 수 있다
    arcPosY += arcMvDirY * arcMvSpd;
}
function draw() 
{
  	// canvas와 도형을 그리는 function
  
    // 화면 클리어
    context.clearRect(0, 0, canvas.width, canvas.height);
    // 다른 도형 그리기 
    drawCanvas();
    drawArc();
}
function drawCanvas() 
{
    context.beginPath();
    context.rect(0, 0, 400, 400); // 시작점이 좌상단 모서리
    context.fillStyle = "lightgray";
    context.fill();
    
    
    context.closePath();
}
function drawArc() 
{
    context.beginPath();
    context.arc(arcPosX, arcPosY, arcRadius, 0 , 2 * Math.PI); 
    context.fillStyle = "blue";
    context.fill();
    context.closePath();
}
setInterval(update, 10);
setInterval(draw, 10);
@함수, 변수 선언에 있어 항상 생각하고 효율적으로 짜보는 습관을 들이자
Author And Source
이 문제에 관하여(2. JavaScript 캔버스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rkdlem94/2.-JavaScript-캔버스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)