배움 __IL/TIL 1기

TIL : 24번째- 221230 [12-5-금]

Mo_bi!e 2022. 12. 30. 19:29

I. INTRO : 프로젝트 관련

목표 코딩연습임 기한내 완수하겠다가 바람직하지 않음, 기한 내 어떻게 만들어지긴 하나 오만가지 쓰레기통이 존재함

자기가만든거 설명도, 오류원인도 모르고 

 

목표를 작게 여러개 (이거하나만 만들더라도 완성도있게) 

자랑할만한 작은거 만드는게 코딩습관에 좋은 방향

 

완성도라 함은 자존심이 높아지는것이다.

 

앞으로 이론 + 프젝 + 실습 동시에 간다.

 

 

II. 객체

1 Top -down 설계

(1) 시나리오에서 개체 식별하기

각각 개체가 무엇인지 생각해보기

슈팅게이 : 빌런 / 전투기 

 

(2)객체분석과 개체분석

JS는 클래스가 없어서 개체는 function 객체로 만든다.

 

 

(3) 캡슐화

시나리오에서 전투기에 행동 체크하기 => 개체마다 역할 정리

 

시나리오 => 실체객체(개체 객체분석)는 무엇인지 => 역할은 무엇인지 => 구현(but 실제 이질감있을수도)

 

 

(4) 결과물

1) 클래스다이어그램

 

클래스다이어그램하면은 이렇게 만드는게 실제로 되는걸까?

 

첫번째. 내가생각한것과 다른 복병 있을수도

두번째. 내 경험미숙에서 오는 불안감

처음부터 Top - down 이 힘들기는 하다.

 

경험없는데 처음부터 팩토링 잘 하기 어렵다. 이후 리팩토링하자

 

 

 

2. 자바스크립트를 위한 입/출력 객체

- HTML 요소들을 객체화 하는 로드 과정이 포함됨

 

HTML =(load)=> DcumnetOboject =(show)=> UserInterface

 

DO 와 UI사이에 자바스크립트를 이용한다.

 

 

III. Canvas 실습

1. html에 JS코드 넣기

<!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>canvas</title>
    
    
    <script src="./app.js"></script>
    
    
</head>
<body>
    <!-- <img src="./img/boy.png" alt=""> -->
    <canvas class="game-canvas" width="700" height="700"></canvas>
</body>
</html>

가운데 스크립트를 넣어준다.

 

2. JavaScript에 값 넣기

<전체코드>

window.addEventListener("load", function(){
//window는 이벤트가지고있음
//이벤트 담고있어서 시점(html가지고 있는 
//모든 리소스가 올라갔을때 )

    // var canvas = this.document.querySelector("")
    //this는 윈도우 이다. 그래서 생략함
    
    
    /** @type {CanvasRenderingContext2D}; */



    var canvas = document.querySelector(".game-canvas");
                //docu가 보따리          //. 하면 태그가 아니라 클래스 명을찾음
                                        //# 하면 HTML id로 찾는다. 못찾는다.
                                        // undefined(null) 가 나온다.
    


    var img = new Image();
    img.src="./image/boy.png";

    img.onload = function(){
        
        var ctx = canvas.getContext("2d");
        

    }
                                        
    console.log(canvas);   
    //나온다 이렇게 canvas는 큰 도화지이다.
    
    

    //이거는 그림판이나 포토샵 제작할수 있다.
    //사용자가 그림 그릴수있게 해주는 도구로

    // ctx.fillStyle = "rgb(50, 100, 50)"; //색상
    // ctx.fillRect(30, 30, 100, 100);  //크기

    // ctx.strokeStyle = "purple";
    // ctx.strokeRect(50, 50, 100, 300);

    ctx.context.drawImage(img, 100, 100);
    

    //opengameart에서 따오기 가능 
    //게임에서 걸어가는 것이다.


});

(1) addEventListener

이벤트라 함은 특정 조건에 부합되었을 때 브라우저에서 사건이 발생을 의미한다.

여기서 addEventListener는 

 

window.addEventListener("load", function(){

 

window는 가장 기본적인 최상위 객체를 의미한다.

여기서 "load" : 는 여러가지 이벤트 타입 중에서 페이지에 있는 모든 요소들이 업로드 됐을 때 사건이 발생하는 것을 의미한다. 

function()은 기본적으로는 발생하지 않다가 load라는 조건이 충족되었을 때 실행하는 것을 의미한다.

 

(2) var canvas = this.document.querySelector("")

document.querySelector("") 에서

"" 인 선택자와 일치하는 요소를 canvas에 반환하는 것을 의미한다.

이 경우 찾지 못하면 null이 나온다.

var canvas = document.querySelector(".game-canvas");
                //docu가 보따리          //. 하면 태그가 아니라 클래스 명을찾음
                                        //# 하면 HTML id로 찾는다. 못찾는다.
                                        // undefined(null) 가 나온다.

 실제로는 이런 방식으로 선언해준다.

클래스 명인 선택자와 일치하는 요소를 canvas에 반환해주는 것을 의미한다.

이렇게 canvas 요소찾아 줄 수있다.

 

(3) /** @type {CanvasRenderingContext2D}; */

vscode에서 canvas 자동완성을 위한 것이다.

 

(4) 이미지 객체

var img = new Image();
    img.src="./image/boy.png";

    img.onload = function(){
        
        var ctx = canvas.getContext("2d");
        

    }

What (정의) : 웹에서 이미지를 다루기 위한 다양한 속성과 이벤트 핸들러를 의미하는 객체이다.

Why (존재이유)  : 웹에서 이미지를 다루기 위해서

 

How (방법)

 

new Image()로 객체를 만들어 준다.

이미지 객체의 속성으로서 img.src 는 이미지가 있는 url을 의미한다.

 

이미지의 이벤트 핸들러로서 onload는 이미지가 성공적으로 로딩되었을 때를 의미한다.

결국 본 함수는 이미지 로딩시 발생하는 함수로서 이해할 수있다.

 

이렇게 이미지가 성공적으로 로딩되면 캔버스를 이용하게 금 할 수있다.

 

(5) canvas 이용해보기

크게 3단계가 필요하다

 

1) canvas 요소찾기

앞서 querySelector를 이용해서 요소를찾았다.

 

2) 드로잉 객체 생성

img.onload = function(){
   var ctx = canvas.getContext("2d");
}

여기서 ctx란 canvs의 c / getContext 의 tx를 합친 약어이다.

 

여기서 getContext는 드로잉에 필요한 속성과 함수를 만들어 주는 객체를 생성하는 것을 의미한다.

한편 2d는 2d형식의 그림을 그릴 것 이기에 필요하다.

 

 

3) canvas 에 그리기

이후 다양한 속성과 함수를 이용해서 그리기가 가능하다.

var ctx = canvas.getContext("2d");
console.log(canvas);   
 //나온다 이렇게 canvas는 큰 도화지이다.



//이거는 그림판이나 포토샵 제작할수 있다.
//사용자가 그림 그릴수있게 해주는 도구로

ctx.fillStyle = "rgb(50, 100, 50)"; //색상
ctx.fillRect(30, 30, 100, 100);  //크기

ctx.strokeStyle = "purple";
ctx.strokeRect(50, 50, 100, 300);

정리하면 위에서 부터 그리면서 내려 갈 수있다.

 

그리는 도구로서 ctx의 참조명의 변수로서 그리기가 가능하다

 

fill 은 색채우기

여기서 fillStyle는 색을 채우는 사각형을 의미한다.

rgb로서 색상조절이 가능하다

 

한편  fillRect는 좌표및 크기 조절이다. 

앞 두개는 좌표 / 뒤 두개는 크기를 의미한다

 

----

 

stroke는 선만 채우기

strokeStyle는 보라색으로 하기

strokeRect는 앞서 fill과 마찬가지이다.

 

 


1. 보충

 

 

 

 

 

2. 회고 

canvas로서 조절이 가능한것은 좋지만, 한땀한땀 해주어야하는것이 다소 부담스러움이 없지안아 상존한다.

더 좋은방법이 있을거라 생각한다.