НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
Графіка. Уроки W3Schools українською для початківців

En

Ігрові компоненти


Додайте червоний квадрат на ігрову зону:


Додати компонент

Створіть конструктор компонентів, який дозволить додавати компоненти в ігрову область.

Конструктор об’єкта називається component, і ми створюємо наш перший компонент під назвою myGamePiece:

Приклад

var myGamePiece;

function startGame() {
  myGameArea.start();
  myGamePiece = new component(30, 30, "red", 10, 120);
}

function component(width, height, color, x, y) {
  this.width = width;
  this.height = height;
  this.x = x;
  this.y = y;
  ctx = myGameArea.context;
  ctx.fillStyle = color;
  ctx.fillRect(this.x, this.y, this.width, this.height);
}
Спробуйте самі »

Компоненти мають властивості та методи контролю їх появи та рухів.


Кадри

Щоб підготувати гру до дії, ми будемо оновлювати дисплей 50 разів на секунду, що нагадує кадри у фільмі.

Спочатку створіть нову функцію під назвою updateGameArea().

В об’єкт myGameArea додайте інтервал, який запускатиме функцію updateGameArea() кожні 20 мілісекунд (50 разів в секунду). Також додайте функцію clear(), яка очищає все полотно.

У конструкторі component додайте функцію під назвою update(), щоб обробити малюнок компонента.

Функція updateGameArea() викликає clear() і метод update().

У результаті компонент малюється та очищається 50 разів на секунду:

Приклад

var myGameArea = {
  canvas : document.createElement("canvas"),
  start : function() {
    this.canvas.width = 480;
    this.canvas.height = 270;
    this.context = this.canvas.getContext("2d");
    document.body.insertBefore(this.canvas, document.body.childNodes[0]);
    this.interval = setInterval(updateGameArea, 20);
  },
  clear : function() {
    this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
  }
}

function component(width, height, color, x, y) {
  this.width = width;
  this.height = height;
  this.x = x;
  this.y = y;
  this.update = function(){
    ctx = myGameArea.context;
    ctx.fillStyle = color;
    ctx.fillRect(this.x, this.y, this.width, this.height);
  }
}

function updateGameArea() {
  myGameArea.clear();
  myGamePiece.update();
}
Спробуйте самі »

Змусити рухатися

Щоб довести, що червоний квадрат малюється 50 разів на секунду, ми будемо змінювати позицію x (горизонталь) на один піксель кожного разу, коли ми оновлюємо ігрову область:

Приклад

function updateGameArea() {
  myGameArea.clear();
  myGamePiece.x += 1;
 
myGamePiece.update();
}
Спробуйте самі »

Навіщо очищати ігрову зону?

Може здатися непотрібним очищати ігрову область під час кожного оновлення. Однак, якщо ми не використовуємо метод clear(), усі рухи компонента залишатимуть слід того, де він був розташований в останньому кадрі:

Приклад

function updateGameArea() {
  // myGameArea.clear();
  myGamePiece.x += 1;
 
myGamePiece.update();
}
Спробуйте самі »

Змініть розмір

Ви можете керувати шириною та висотою компонента:

Приклад

Створіть прямокутник 10x140 пікселів:

function startGame() {
  myGameArea.start();
  myGamePiece = new component(140, 10, "red", 10, 120);
}
Спробуйте самі »

Змініть колір

Ви можете керувати кольором компонента:

Приклад

function startGame() {
  myGameArea.start();
  myGamePiece = new component(30, 30, "blue", 10, 120);
}
Спробуйте самі »

Ви також можете використовувати інші значення кольорів, наприклад hex, rgb або rgba:

Приклад

function startGame() {
  myGameArea.start();
  myGamePiece = new component(30, 30, "rgba(0, 0, 255, 0.5)", 10, 120);
}
Спробуйте самі »

Змініть позицію

Ми використовуємо координати x та y, щоб розташувати компоненти в ігровій зоні.

Верхній лівий кут полотна має координати (0,0)

Наведіть курсор миші на область гри нижче, щоб побачити її координати x та y:

X
Y

Ви можете розташувати компоненти в будь-якому місці ігрової зони:

Приклад

function startGame() {
  myGameArea.start();
  myGamePiece = new component(30, 30, "red", 2, 2);
}
Спробуйте самі »

Багато компонентів

Ви можете розмістити скільки завгодно компонентів у ігровій зоні:

Приклад

var redGamePiece, blueGamePiece, yellowGamePiece;

function startGame() {
  redGamePiece = new component(75, 75, "red", 10, 10);
  yellowGamePiece = new component(75, 75, "yellow", 50, 60);
  blueGamePiece = new component(75, 75, "blue", 10, 110);
 
myGameArea.start();
}

function updateGameArea() {
  myGameArea.clear();
  redGamePiece.update();
  yellowGamePiece.update();
  blueGamePiece.update();
}
Спробуйте самі »

Переміщення компонентів

Змусьте всі три компоненти рухатися в різних напрямках:

Приклад

function updateGameArea() {
  myGameArea.clear();
  redGamePiece.x += 1;
  yellowGamePiece.x += 1;
  yellowGamePiece.y += 1;
  blueGamePiece.x += 1;
  blueGamePiece.y -= 1;
  redGamePiece.update();
  yellowGamePiece.update();
  blueGamePiece.update();
}
Спробуйте самі »