This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

๊ธฐ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜

<canvas> ์š”์†Œ๋Š” JavaScript๋กœ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์• ๋‹ˆ๋ฉ”์ด์…˜๋„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ถ”๊ฐ€ ์ž‘์—…์ด ๋” ํ•„์š”ํ•˜๊ณ , ์•ž์œผ๋กœ ๊ทธ์— ๋Œ€ํ•œ ํŽ˜์ด์ง€๋„ ๋จธ์ง€ ์•Š์•„ ์ถ”๊ฐ€๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๋„ํ˜•์€ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด ๊ทธ ๋ชจ์Šต ๊ทธ๋Œ€๋กœ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค ๋•Œ์˜ ๊ฐ€์žฅ ํฐ ์ œ์•ฝ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋„ํ˜•์„ ์›€์ง์ด๊ณ ์ž ํ•˜๋ฉด ๊ทธ ๋„ํ˜•๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ๊ทธ ๋„ํ˜•์ด ๊ทธ๋ ค์ง€๊ธฐ ์ „์— ๊ทธ๋ ค์ง„ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ๊ทธ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์žฅ๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„๋„ ๋งŽ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ ๋Šฅ๋ ฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‹จ๊ณ„

ํ•œ ์žฅ๋ฉด์„ ๊ทธ๋ฆฌ๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์Šต๋‹ˆ๋‹ค.

  1. ์บ”๋ฒ„์Šค๋ฅผ ๋น„์›๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๋ ค๋Š” ๋„ํ˜•์ด (๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ์ฒ˜๋Ÿผ) ์บ”๋ฒ„์Šค๋ฅผ ๊ฐ€๋“ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด, ์ด์ „์— ๊ทธ๋ ค์ง„ ๋ชจ๋“  ๋„ํ˜•์„ ์ง€์šธ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ clearRect() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ์บ”๋ฒ„์Šค ์ƒํƒœ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์บ”๋ฒ„์Šค ์ƒํƒœ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” (์Šคํƒ€์ผ ๋ณ€๊ฒฝ, ๋ชจ์–‘ ๋ณ€ํ˜• ๋“ฑ์˜) ์„ค์ •๊ฐ’์„ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๊ณ , ๋ฐ”๋€ ๊ฐ’์„ ๊ฐ ์žฅ๋ฉด๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ์›๋ž˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•  ๋„ํ˜•์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ์‹ค์ œ ์žฅ๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  4. ์บ”๋ฒ„์Šค ์ƒํƒœ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์žฅ๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ ์ „์— ์ €์žฅ๋œ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ์–ดํ•˜๊ธฐ

์บ”๋ฒ„์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ”๋ฒ„์Šค์— ๋„ํ˜•๋“ค์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ๋ณดํ†ต์˜ ๊ฒฝ์šฐ์—์„œ๋Š”, ์ฝ”๋“œ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ์บ”๋ฒ„์Šค์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฐ๊ณผ๋งŒ์„ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, for ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ •ํ•ด์ง„ ์‹œ๊ฐ„๋งˆ๋‹ค ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ์–ดํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ •๋œ ๋ณ€๊ฒฝ

์ •ํ•ด์ง„ ์‹œ๊ฐ„๋งˆ๋‹ค ํŠน์ • ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅผ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” window.setInterval()๊ณผ window.setTimeout() ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ์•Œ์•„๋‘˜ ๊ฒƒ: ํ˜„์žฌ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ window.requestAnimationFrame() ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํŠœํ† ๋ฆฌ์–ผ์€ ๊ณง ์—…๋ฐ์ดํŠธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

setInterval(function, delay)

delay ๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ(1,000๋ถ„์˜ 1์ดˆ)๋งˆ๋‹ค function ํ•จ์ˆ˜ ๋ฐ˜๋ณต ์‹คํ–‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

setTimeout(function, delay)

delay ๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ(1,000๋ถ„์˜ 1์ดˆ) ๊ฒฝ๊ณผํ›„, function ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์ œ์–ด๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ฐ˜๋ณต ์‹คํ–‰์—๋Š” setInterval() ํ•จ์ˆ˜๊ฐ€ ์•Œ๋งž์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ ๋ณ€๊ฒฝ

์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ์–ดํ•˜๋Š” ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค. ๊ฒŒ์ž„์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ํ‚ค๋ณด๋“œ๋‚˜ ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. EventListener๋ฅผ ์„ค์ •ํ•˜์—ฌ, ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜์šฉ ํ”„๋ ˆ์ž„์›(framework)์˜ ์ตœ์†Œ ๊ธฐ๋Šฅ ๋ฒ„์ „ ๋˜๋Š” ์ตœ๋Œ€ ๊ธฐ๋Šฅ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

js
var myAnimation = new MiniDaemon(null, animateShape, 500, Infinity);

๋˜๋Š”

js
var myAnimation = new Daemon(null, animateShape, 500, Infinity);

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š”, ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด window.setInterval()์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์ œ์ผ ์•„๋ž˜์ชฝ์— window.setTimeout()์„ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ ๋งํฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒœ์–‘๊ณ„ ์• ๋‹ˆ๋ฉ”์ด์…˜

์ด ์˜ˆ์ œ์—์„œ๋Š” ๋‹ฌ์ด ์ง€๊ตฌ๋ฅผ ๋Œ๊ณ  ์ง€๊ตฌ๊ฐ€ ํƒœ์–‘์„ ๋„๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

js
var sun = new Image();
var moon = new Image();
var earth = new Image();
function init() {
  sun.src = "canvas_sun.png";
  moon.src = "canvas_moon.png";
  earth.src = "canvas_earth.png";
  setInterval(draw, 100);
}

function draw() {
  var ctx = document.getElementById("canvas").getContext("2d");

  ctx.globalCompositeOperation = "destination-over";
  ctx.clearRect(0, 0, 300, 300); // ์บ”๋ฒ„์Šค๋ฅผ ๋น„์šด๋‹ค

  ctx.fillStyle = "rgba(0,0,0,0.4)";
  ctx.strokeStyle = "rgba(0,153,255,0.4)";
  ctx.save();
  ctx.translate(150, 150);

  // ์ง€๊ตฌ
  var time = new Date();
  ctx.rotate(
    ((2 * Math.PI) / 60) * time.getSeconds() +
      ((2 * Math.PI) / 60000) * time.getMilliseconds(),
  );
  ctx.translate(105, 0);
  ctx.fillRect(0, -12, 50, 24); // Shadow
  ctx.drawImage(earth, -12, -12);

  // ๋‹ฌ
  ctx.save();
  ctx.rotate(
    ((2 * Math.PI) / 6) * time.getSeconds() +
      ((2 * Math.PI) / 6000) * time.getMilliseconds(),
  );
  ctx.translate(0, 28.5);
  ctx.drawImage(moon, -3.5, -3.5);
  ctx.restore();

  ctx.restore();

  ctx.beginPath();
  ctx.arc(150, 150, 105, 0, Math.PI * 2, false); // ์ง€๊ตฌ ๊ถค๋„
  ctx.stroke();

  ctx.drawImage(sun, 0, 0, 300, 300);
}

์‹œ๊ณ„ ์• ๋‹ˆ๋ฉ”์ด์…˜

์ด ์˜ˆ์ œ์—์„œ๋Š”, ํ˜„์žฌ ์‹œ๊ฐ์„ ๋ณด์—ฌ์ฃผ๋Š” ์›€์ง์ด๋Š” ์‹œ๊ณ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

js
function init() {
  clock();
  setInterval(clock, 1000);
}

function clock() {
  var now = new Date();
  var ctx = document.getElementById("canvas").getContext("2d");
  ctx.save();
  ctx.clearRect(0, 0, 150, 150);
  ctx.translate(75, 75);
  ctx.scale(0.4, 0.4);
  ctx.rotate(-Math.PI / 2);
  ctx.strokeStyle = "black";
  ctx.fillStyle = "white";
  ctx.lineWidth = 8;
  ctx.lineCap = "round";

  // ์‹œ๊ณ„ํŒ - ์‹œ
  ctx.save();
  for (var i = 0; i < 12; i++) {
    ctx.beginPath();
    ctx.rotate(Math.PI / 6);
    ctx.moveTo(100, 0);
    ctx.lineTo(120, 0);
    ctx.stroke();
  }
  ctx.restore();

  // ์‹œ๊ณ„ํŒ - ๋ถ„
  ctx.save();
  ctx.lineWidth = 5;
  for (i = 0; i < 60; i++) {
    if (i % 5 != 0) {
      ctx.beginPath();
      ctx.moveTo(117, 0);
      ctx.lineTo(120, 0);
      ctx.stroke();
    }
    ctx.rotate(Math.PI / 30);
  }
  ctx.restore();

  var sec = now.getSeconds();
  var min = now.getMinutes();
  var hr = now.getHours();
  hr = hr >= 12 ? hr - 12 : hr;

  ctx.fillStyle = "black";

  // ์‹œ๊ฐ„ ํ‘œ์‹œ - ์‹œ
  ctx.save();
  ctx.rotate(
    hr * (Math.PI / 6) + (Math.PI / 360) * min + (Math.PI / 21600) * sec,
  );
  ctx.lineWidth = 14;
  ctx.beginPath();
  ctx.moveTo(-20, 0);
  ctx.lineTo(80, 0);
  ctx.stroke();
  ctx.restore();

  // ์‹œ๊ฐ„ ํ‘œ์‹œ - ๋ถ„
  ctx.save();
  ctx.rotate((Math.PI / 30) * min + (Math.PI / 1800) * sec);
  ctx.lineWidth = 10;
  ctx.beginPath();
  ctx.moveTo(-28, 0);
  ctx.lineTo(112, 0);
  ctx.stroke();
  ctx.restore();

  // ์‹œ๊ฐ„ ํ‘œ์‹œ - ์ดˆ
  ctx.save();
  ctx.rotate((sec * Math.PI) / 30);
  ctx.strokeStyle = "#D40000";
  ctx.fillStyle = "#D40000";
  ctx.lineWidth = 6;
  ctx.beginPath();
  ctx.moveTo(-30, 0);
  ctx.lineTo(83, 0);
  ctx.stroke();
  ctx.beginPath();
  ctx.arc(0, 0, 10, 0, Math.PI * 2, true);
  ctx.fill();
  ctx.beginPath();
  ctx.arc(95, 0, 10, 0, Math.PI * 2, true);
  ctx.stroke();
  ctx.fillStyle = "rgba(0,0,0,0)";
  ctx.arc(0, 0, 3, 0, Math.PI * 2, true);
  ctx.fill();
  ctx.restore();

  ctx.beginPath();
  ctx.lineWidth = 14;
  ctx.strokeStyle = "#325FA2";
  ctx.arc(0, 0, 142, 0, Math.PI * 2, true);
  ctx.stroke();

  ctx.restore();
}

์›€์ง์ด๋Š” ํŒŒ๋…ธ๋ผ๋งˆ ์‚ฌ์ง„

์ด ์˜ˆ์ œ์—์„œ๋Š”, ์›€์ง์ด๋Š” ํŒŒ๋…ธ๋ผ๋งˆ ์‚ฌ์ง„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ๊ทธ๋ฆผ์€ ์œ„ํ‚คํ”ผ๋””์–ด(Wikipedia)์—์„œ ๊ตฌํ•œ ์š”์„ธ๋ฏธํ‹ฐ ๊ตญ๋ฆฝ๊ณต์›์ž…๋‹ˆ๋‹ค. ์บ”๋ฒ„์Šค๋ณด๋‹ค ํฐ ๊ทธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

js
var img = new Image();

// ๋ณ€์ˆ˜
// ์Šคํฌ๋กค๋  ์ด๋ฏธ์ง€, ๋ฐฉํ–ฅ, ์†๋„๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด ๋ณ€์ˆ˜๊ฐ’์„ ๋ฐ”๊พผ๋‹ค.

img.src = "capitan_meadows,_yosemite_national_park.jpg";
var CanvasXSize = 800;
var CanvasYSize = 200;
var speed = 30; // ๊ฐ’์ด ์ž‘์„ ์ˆ˜๋ก ๋นจ๋ผ์ง„๋‹ค
var scale = 1.05;
var y = -4.5; // ์ˆ˜์ง ์˜ต์…‹

// ์ฃผ์š” ํ”„๋กœ๊ทธ๋žจ

var dx = 0.75;
var imgW;
var imgH;
var x = 0;
var clearX;
var clearY;
var ctx;

img.onload = function () {
  imgW = img.width * scale;
  imgH = img.height * scale;
  if (imgW > CanvasXSize) {
    x = CanvasXSize - imgW;
  } // ์บ”๋ฒ„์Šค๋ณด๋‹ค ํฐ ์ด๋ฏธ์ง€
  if (imgW > CanvasXSize) {
    clearX = imgW;
  } // ์บ”๋ฒ„์Šค๋ณด๋‹ค ํฐ ์ด๋ฏธ์ง€
  else {
    clearX = CanvasXSize;
  }
  if (imgH > CanvasYSize) {
    clearY = imgH;
  } // ์บ”๋ฒ„์Šค๋ณด๋‹ค ํฐ ์ด๋ฏธ์ง€
  else {
    clearY = CanvasYSize;
  }
  // ์บ”๋ฒ„์Šค ์š”์†Œ ์–ป๊ธฐ
  ctx = document.getElementById("canvas").getContext("2d");
  // ์ƒˆ๋กœ ๊ทธ๋ฆฌ๊ธฐ ์†๋„ ์„ค์ •
  return setInterval(draw, speed);
};

function draw() {
  // ์บ”๋ฒ„์Šค๋ฅผ ๋น„์šด๋‹ค
  ctx.clearRect(0, 0, clearX, clearY);
  // ์ด๋ฏธ์ง€๊ฐ€ ์บ”๋ฒ„์Šค๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด (If image is <= Canvas Size)
  if (imgW <= CanvasXSize) {
    // ์žฌ์„ค์ •, ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘
    if (x > CanvasXSize) {
      x = 0;
    }
    // ์ถ”๊ฐ€ ์ด๋ฏธ์ง€ ๊ทธ๋ฆฌ๊ธฐ
    if (x > CanvasXSize - imgW) {
      ctx.drawImage(img, x - CanvasXSize + 1, y, imgW, imgH);
    }
  }
  // ์ด๋ฏธ์ง€๊ฐ€ ์บ”๋ฒ„์Šค๋ณด๋‹ค ํฌ๋‹ค๋ฉด (If image is > Canvas Size)
  else {
    // ์žฌ์„ค์ •, ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘
    if (x > CanvasXSize) {
      x = CanvasXSize - imgW;
    }
    // ์ถ”๊ฐ€ ์ด๋ฏธ์ง€ ๊ทธ๋ฆฌ๊ธฐ
    if (x > CanvasXSize - imgW) {
      ctx.drawImage(img, x - imgW + 1, y, imgW, imgH);
    }
  }
  // ์ด๋ฏธ์ง€ ๊ทธ๋ฆฌ๊ธฐ
  ctx.drawImage(img, x, y, imgW, imgH);
  // ์›€์ง์ž„ ์ •๋„
  x += dx;
}

์˜ˆ์ œ์— ์‚ฌ์šฉ๋œ <canvas>์˜ ํฌ๊ธฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์บ”๋ฒ„์Šค์˜ ๋„ˆ๋น„๊ฐ€ ๋ณ€์ˆ˜ CanvasXSize๊ฐ’๊ณผ ๊ฐ™๊ณ , ์บ”๋ฒ„์Šค์˜ ๋†’์ด๋Š” ๋ณ€์ˆ˜ CanvasYSize๊ฐ’๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์— ์ฃผ๋ชฉํ•˜๋ผ.

html
<canvas id="canvas" width="800" height="200"></canvas>

Live sample

๋˜ ๋‹ค๋ฅธ ์˜ˆ์ œ๋“ค

Gartic

๋‹ค์ค‘ ์‚ฌ์šฉ์ž ์ง€์› ๊ทธ๋ฆฌ๊ธฐ ๋†€์ด.

Canvascape

3D ์–ด๋“œ๋ฒค์ฒ˜ ๊ฒŒ์ž„ (1์ธ์นญ ์ŠˆํŒ…).

A basic ray-caster

ํ‚ค๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ์–ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ข‹์€ ์˜ˆ์ œ.

canvas adventure

ํ‚ค๋ณด๋“œ ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋˜๋‹ค๋ฅธ ์ข‹์€ ์˜ˆ์ œ.

An interactive Blob

๋ฌผ๋ฐฉ์šธ ๊ฐ–๊ณ  ๋†€๊ธฐ.

Flying through a starfield

๋ณ„, ๋™๊ทธ๋ผ๋ฏธ, ๋„ค๋ชจ๊ฐ€ ๋– ๋‹ค๋‹ˆ๋Š” ์šฐ์ฃผ๋ฅผ ๋ˆ„๋ฒผ๋ผ.

iGrapher

์ฃผ์‹ ์‹œ์žฅ ์ž๋ฃŒ ์ฐจํŠธ ์˜ˆ์ œ.

์ด๊ฒƒ๋„ ๋ณด์„ธ์š”

page(Doc) not found /ko/docs/Web/Guide/HTML/Canvas_tutorial/Compositing