본문 바로가기

개발(Development)/HTML Canvas(캔버스)11

VSCode 캔버스(Canvas), WebGL 자동완성 안됨 해결 방법: @type VIsual Studio Code 상에서 html canvas나 WebGL 작업을 하는데, 아래처럼 아무런 자동완성이 뜨지 않을 때가 있다. 매번 명령어를 검색해보기도 귀찮다. # 해결방법 : @type을 통해 VS Code에게 힌트를 주면, Canvas나 WebGL 컨텍스트 객체도 자동완성이 된다. 1. CanvasRenderingContext2 : canvas컨텍스트 객체 생성 전에, 아래처럼 @type 태그 주석을 달아준다 /** @type {CanvasRenderingContext2D} */ const canvas = document.getElementById("canvas_main"); /** @type {CanvasRenderingContext2D} */ const ctx = canvas.ge.. 2021. 6. 14.
HTML Canvas(캔버스) 마우스 이동/클릭 좌표 추적 확인 방법 # HTML 캔버스 내부의 마우스 좌표 확인 방법 1. HTML 캔버스 생성(html) 2. 캔버스 취득(Javascript) const canvas = document.getElementById("myCanvas"); 3. 마우스 클릭시, 캔버스내 좌표 확인 canvas.onclick = function(event){ const x = event.clientX - ctx.canvas.offsetLeft; const y = event.clientY - ctx.canvas.offsetTop; } * 캔버스 객체에 onclick 이벤트 콜백함수를 등록한다.(상황에 따라 onmousedown을 사용해도 된다) * 마우스의 좌표(event.clinetX, event.clinetY)와 캔버스의 위치(ctx.can.. 2021. 6. 6.
HTML Canvas(캔버스) 애니메이션 구현 방법 기초 # canvas 애니메이션 구현 기본 원리 1. HTML 캔버스 생성(html) 2. 캔버스 및 그리기 객체 취득(Javascript) const canvas = document.getElementById("myCanvas"); const ctx = canvas.getContext("2d"); 3. "애니메이션 함수" 선언 function animate(){ ... 변화를 발생시키는 코드... } * 캔버스 내의 그림을 다른 위치/색상 등으로 변화시키는 함수 구현 * 기존 그림을 제거하기 위해서는 ctx.clearRect(x좌표, y좌표, 너비, 높이) 함수를 활용 4. "setInterval(콜백함수, 시간ms)"로 애니메이션 함수 반복 호출 setInterval(animate, 30); * anima.. 2021. 6. 4.
HTML Canvas(캔버스) 텍스트 그리기 방법: fillText, strokeText # canvas에 텍스트(글자) 쓰기 1. 글자 색 설정 ctx.fillStyle = "색상"; 2. 폰트 설정 ctx.font = "스타일 굵기 크기 서체" 1) 스타일: normal(디폴트)|italic|oblique 2) 굵기: normal(디폴트)|bold|bolder|lighter 3) 크기: 숫자px(디폴트 10px) 4) 서체: sans-serif(디폴트)|Arial ... * 미지정시 ctx.font = "10px sans-serif" 디폴트 적용됨 3. 텍스트 정렬 1) 좌우정렬: ctx.textAlign = "start(디폴트)|end|center|left|right"; 2) 상하정렬: ctx.textBaseline= "alphabetic(디폴트)|top|hanging|middle|id.. 2021. 6. 4.
HTML Canvas(캔버스) 패턴 이미지 채우기 적용 방법: createPattern # 이미지를 반복 패턴으로 채우기 방법 1. 이미지 객채 생성 const img = new Image(); 2. 이미지 소스 설정 img.src = '이미지 경로'; 3. 패턴 객체 생성 const pattern = ctx.createPattern(img, 'repeat'); * repeat: 이미지 패턴 반복 * repeat-x: x축 반복 * repeat-y: y축 반복 * no-repeat: 반복 안함 4. 패턴 적용 ctx.fillStyle = pattern; * fillStyle 적용 후, ctx.fillRect(x좌표, y좌표, 길이, 높이); 처럼 색을 채우면 패턴이 적용된다. 참고) 상황에 따라, 이미지 로드가 완료된 후 적용하는 것이 안전하다. img.onload = function(){.. 2021. 6. 4.
HTML Canvas(캔버스): 이미지 그리기 방법 drawImage # 캔버스에 이미지 띄우는 방법 1. 이미지 객체 생성 const img = new Image(); 2. 이미지 소스 설정 img.src = '이미지 경로'; 3. 이미지 그리기 ctx.drawImage(img, x좌표, y좌표, 너비, 높이); * 너비/높이는 옵션이며, 생략시 원본 크기대로 이미지를 띄운다. 참고) 아래와 같이 이미지 로드가 완료된 후에 그리도록 설정하는게 안전하다. img.onload = function(){ ctx.drawImage(img, x좌표, y좌표, 너비, 높이) } 참고) sprite 이미지 사용시, 이미지 자르기 옵션을 추가 적용한다. ctx.drawImage(img, sx, sy, swidth, sheight, x, y, width, height); * 스프라이트 이.. 2021. 6. 4.
HTML Canvas(캔버스): 그라데이션 gradient 색 설정 방법 캔버스 기초는 아래 글 참고 HTML Canvas(캔버스) 기초: 기본 사용 방법 & 샘플 예제 코드 # canvas 그라데이션: 방법 정리 1. 그라데이션 객체 생성 1)선형: 그리기객체.createLinearGradient(시작 X좌표, 시작 Y좌표, 끝 X좌표, 끝 Y좌표) 2)방사형: 그리기객체.createRadialGradient(시작 X좌표, 시작 Y좌표, 시작 반지름, 끝 X좌표, 끝 Y좌표, 끝 반지름) 2. 그라데이션 위치, 색상 지정 : 그라데이션객체.addColorStop(위치, 색상) * 위치는 0(시작)~1(끝) 사이의 값으로 설정 3. 그리기 객체의 색상으로 그라데이션 설정 : 그리기객체.fillStyle = 그라데이션객체; # canvas 그라데이션: 샘플 예제 코드 선형 그라.. 2021. 6. 3.
HTML Canvas(캔버스): 원 circle 그리기 방법 캔버스 기초는 아래 글 참고 HTML Canvas(캔버스) 기초: 기본 사용 방법 & 샘플 예제 코드 # canvas 원 그리기: 방법 정리 1. path 시작 설정 이 설정을 해주어야, 새로운 선을 그릴 준비가 된다.(안 그러면 이전에 그린 선과 이어진다) : ctx.beginPath() 2. 원 모양 설정 : ctx.arc(x, y, 반지름, 시작각도, 마지막각도) * x, y는 원의 중심 좌표 * 시작각도: 0, 마지막각도: 2*Math.PI 로 설정하면 360도의 원이 그려진다. 3. 원 그리기 : ctx.stroke() 4. 원 색 채우기 1) 색 설정: ctx.fillStyle = "색상"; 2) 색 채우기: ctx.fill(); # canvas 원 그리기: 샘플 예제 코드 원을 그리고 색까지.. 2021. 6. 3.
HTML Canvas(캔버스): 사각형 그리기 방법 캔버스 기초에 대한 내용은 아래 글 참고 HTML Canvas(캔버스) 기초: 기본 사용 방법 & 샘플 예제 코드 # canvas에서 사각형 그리기: 코드 정리 1. '선'만으로 이루어진 사각형 그리기 1) 선색 설정: ctx.strokeStyle = '선 색상' 2) 선으로 사각형 그리기: ctx.strokeRect(x좌표, y좌표, 가로, 세로) 2. '색'으로 채워진 사각형 그리기 1) 내부 색상 설정 : ctx.fillStyle = '내부 색상'; 2) 사각형 그리기: ctx.fillRect(x좌표, y좌표, 가로, 세로); 3. '선+색' 사각형 그리기 : '선'사각형과 '색'사각형을 같은 자리에 그리면 된다. 1) '선'사각형 그리고: ctx.strokeRect(x좌표, y좌표, 가로, 세로).. 2021. 6. 3.