Challenge/Youtube

Chrome Dinosaur Game (1)

Deviloper๐Ÿ˜ˆ 2021. 9. 30. 14:39

 

https://www.youtube.com/watch?v=qkTtmgCjHhM

 

 

HA2๊ฐ€ ๋๋‚˜๊ณ  Solo Day๊ฐ€ ์ดํ‹€ ์žˆ์–ด์„œ ์ด์ „์˜ ํŽ˜์–ด๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ๊ฒŒ์ž„์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ์Šคํ…Œ์ด์ธ ์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ์ ‘ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ข‹์€ ๊ธฐํšŒ์˜€๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

๋˜ํ•œ HTML, CSS, JS ๋งŒ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ๋ผ๋„ ์ด๋Ÿฐ ๊ฒŒ์ž„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ์žฌ๋ฐŒ๋„ค์š”ใ…Žใ…Ž

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์˜ค๋Š˜ ๊ฒŒ์ž„์„ ์ ˆ๋ฐ˜์ •๋„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ๊ฒƒ๋“ค๊ณผ ํŒ์œผ๋กœ ์จ๋จน์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

<canvas> ํƒœ๊ทธ

<canvas>ํƒœ๊ทธ๋Š” ์ฒ˜์Œ ๋ณธ ํƒœ๊ทธ์˜€์Šต๋‹ˆ๋‹ค. ์›นํŽ˜์ด์ง€ ์ƒ์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค. ์›, ๋ฐ•์Šค, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ทธ๋ž˜ํ”ฝ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•˜๋„ค์š”!

HTML์—์„œ์˜ <canvas> ํƒœ๊ทธ๋ฅผ JS์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธฐ๋ณธ์ ์ธ ์„ธํŒ…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์„ธ๋ถ€์ ์œผ๋กœ ๋” ์‚ดํŽด๋ณด๋„๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');

canvas.width = window.innerWidth-100;
canvas.height = window.innerHeight-100;

 

 

HTMLCanvasElement.getContext( )

getContext์˜ ์ธ์ž๋Š” contextType, contextAttributes๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์ƒ์—์„œ๋Š” getContext("2d")๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ, 2์ฐจ์› ์š”์†Œ์˜ ๊ฐ์ฒด๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” CanvasRenderingContext2D๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๊ณ ๋‚˜๋ฉด ๋‹ค์–‘ํ•œ Method๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๋ชจํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fillRect, moveTo, clearRect๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ์„ค๋ช…์€ ์•„๋ž˜ MDN์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D

 

 

CanvasRenderingContext2D - Web APIs | MDN

The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a

element. It is used for drawing shapes, text, images, and other objects.

developer.mozilla.org

Global Object

global object๋Š” global scope์—์„œ ํ•ญ์ƒ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ global object๋Š” window๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋กฌ ๊ฒŒ์ž„ ์˜์ƒ์—์„œ๋Š” window ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  canvas์˜ ๋ฒ”์œ„๋ฅผ ์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

window.innerWidth / window.innerHeight

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด window.innerHeight๋Š” ํƒญ, ๋ถ๋งˆํฌ๋ฐ” ๋“ฑ์˜ ์š”์†Œ๋ฅผ ๋ถˆํฌํ•จํ•œ ๋ถ€๋ถ„์„ ์ผ์ปซ์Šต๋‹ˆ๋‹ค. inner๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ๊ธธ๋ž˜ outerHeight๋„ ์žˆ๋‚˜ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ดค๋Š”๋ฐ outerHeight๋Š” ํƒญ, ๋ถ๋งˆํฌ๋ฐ”๊นŒ์ง€ ํฌํ•จํ•œ ์ „์ฒด ๋ธŒ๋ผ์šฐ์ € ํฌ๊ธฐ์˜ ๋†’์ด๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด canvas์˜ ํฌ๊ธฐ๋ฅผ innerHeight์™€ innerWidth๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•ด์ค€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

Dinosaur์™€ Cactus ๋งŒ๋“ค๊ธฐ

Dinosaur์™€ Cactus์™€ ๊ฐ™์€ ์š”์†Œ๋“ค์€ ์—ฌ๋Ÿฌ ์†์„ฑ์„ ์ง€๋‹ˆ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ์„ ์–ธํ•ด์ค€ ํ›„์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์†์„ฑ ๊ด€๋ฆฌ์— ๋”์šฑ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค. 

๋˜ํ•œ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋“ค๋„ ๊ด€๋ฆฌํ•ด์ฃผ๊ธฐ ํŽธ๋ฆฌํ•ด์ง‘๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ๊ฒŒ์ž„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๋Œ€๋กœ ์ง„ํ–‰ํ•  ๋•Œ ๋„ˆ๋ฌด ํฐ ๊ทœ๋ชจ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๊ธฐ ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜์ƒ์—์„œ๋Š” dino๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , cactus๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

Cactus์˜ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ์„ ์ธ์žฅ๋“ค์ด ์ง€์†์ ์œผ๋กœ ๋‚˜์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

class Cactus {
  constructor() {
    this.x = 800;
    this.y = 200;
    this.width = 50;
    this.height = 50;
  }
  draw() {
    ctx.fillStyle = 'pink';
    ctx.fillRect(this.x, this.y, this.width, this.height);
  }
}