본문 바로가기

JavaScript

JavaScript canvas 함수(2)

이전 포스팅을 이어서 작성한 내용입니다. 

https://rubbery.tistory.com/47

 

JavaScript canvas 함수

Javascript canvas 란? canvas를 사용하여 자바스크립트와 html 을 사용하여 그래픽을 그릴 수 있다. html 에서 canvas 태그를 사용하여 작성하고 javascript로 인터페이스를 그려서 조작할 수 있다. canvas 요소

rubbery.tistory.com

JavaScript canvas 함수를  이용하여 mousedown 이벤트가 발생하였을때 총알이 뚫린 이미지를 출력하게 만들어보자.

 

1. canvas에 로딩할 이미지를 불러온다.

hole.png : 총알 뚫린 이미지

background.jpg : 배경 이미지

hole.png
background.jpg

 

2. snipe 의 좌표와 총알 구멍 객체 (object) 를 저장할 배열을 생성해준다.

 

 

 

 

3. 총알 구멍 이미지를 for 문을 이용하여

이미지 정보를 담고 있는 객체를 불러와 holes[i] 배열에 있는 x,y 좌표를 이용해서 총알 구멍을 그린다.

 

 

 

4. 총알 구멍을 발생시킬 좌표를 mousedown 이용하여 이벤트가 발생한 x,y 좌표를 object에 담고

holes 배열에 저장 시킨다.

 

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Step09_example5.html</title>
    <style>
        canvas {
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <h1>canvas 요소 활용해 보기</h1>
    <!-- canvas 요소는 width 와 height 를 속성으로 직접 지정할수 있다.-->
    <canvas id="myCanvas" width="800" height="500"></canvas>
    <script>

        //canvas 요소의 참조값
        const canvas=document.querySelector("#myCanvas");
        // canvas 에 그림을 그릴 도구 (context) 객체 얻어내기
        const context = canvas.getContext("2d");

        // canvas 에 그릴 이미지 로딩하기
        const snipeImg = new Image();
        snipeImg.src = "images/snipe.png";

        const holeImg = new Image();
        holeImg.src = "images/hole.png";

        const backImg = new Image();
        backImg.src = "images/background.jpg"

        // snipe 의 좌표
        let snipeX = 0, snipeY = 0;
        // 총알 구멍 객체 (object) 를 저장할 배열
        const holes = [];

        setInterval(() => {
            // 여기 함수 내부는 1/100 초 마다 한번씩 실행된다.
            // context.clearRect(0, 0, 800, 500)
            // 배경 이미지를 canvas 의 크기에 맞게 그린다.
            context.drawImage(backImg, 0, 0, 800, 500);

            // 총알 구멍 이미지
            for (let i =0; i<holes.length; i++) {
                // 1번째 총알 구멍 이미지 정보를 담고 있는 객체를 불러와서
                let tmp = holes[i];
                // 거기에 담긴 x, y 좌표를 이용해서 총알 구멍을 그린다.
                context.drawImage(holeImg, tmp.x-10, tmp.y-10, 20, 20)
            }

            context.drawImage(snipeImg, snipeX-50, snipeY-50, 100, 100)
        }, 10);

        // canvas 요소의 mousemove 이벤트 처리
        canvas.addEventListener("mousemove", (e)=>{
            // 이벤트가 발생한곳의 canvas 내에서의 좌표
            snipeX = e.offsetX;
            snipeY = e.offsetY;
        });
        canvas.addEventListener("mousedown", (e)=>{
            // 이벤트가 발생한 곳의 좌표를 object 에 담는다
            const hole={x:e.offsetX, y:e.offsetY};
            // holes 배열에 저장(누적) 시킨다.
            holes.push(hole);
        })

    </script>
</body>
</html>

완성된 전체 스크립트 입니다.

 

 

 

 

 

빨간색 영역안에서 로딩한 이미지가 마우스 포인터가 움직이는 곳에 클릭하면 총알 구멍 이미지가 찍힌다.

'JavaScript' 카테고리의 다른 글

JavaScript canvas 함수(4)  (0) 2023.05.08
JavaScript canvas 함수(3)  (0) 2023.05.04
JavaScript Const  (0) 2023.05.02
JavaScript canvas 함수  (0) 2023.05.02
JavaScript setInterval, setTimeout 함수  (0) 2023.05.01