На MDN есть туториал "2D игра на чистом JavaScript", в котором изучаются основы использования элемента HTML5 <canvas>.
В этом туториале мы повторим разработку этой игры на Svelte.
1. Создание Canvas и рисование на нем
В этом примере мы отображаем три геометрические фигуры: квадрат, прямоугольник и круг.
Переменная canvas будет определена после монтирования компонента в DOM, поэтому весь код размещаем в обработчике жизненного цикла onMount. Выполнена привязка элемента canvas к переменной canvas с помощью привязки this.
<script>
import { onMount } from 'svelte';
let canvas;
onMount(() => {
const ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.rect(20, 40, 50, 50);
ctx.fillStyle = "#FF0000";
ctx.fill();
ctx.closePath();
ctx.beginPath();
ctx.arc(240, 160, 20, 0, Math.PI*2, false);
ctx.fillStyle = "green";
ctx.fill();
ctx.closePath();
ctx.beginPath();
ctx.rect(160, 10, 100, 40);
ctx.strokeStyle = "rgba(0, 0, 255, 0.5)";
ctx.stroke();
ctx.closePath();
});
</script>
<canvas
bind:this={canvas}
width={480}
height={320}
></canvas>
<style>
canvas { background: #eee; }
</style>
Далее мы просто переносим весь код без изменений в функцию onMount(). Комментарии даны только относительно использования Svelte.
2. Перемещение мяча
3. Отскок от стены
4. Управление ракеткой клавишами
Pure JavaScript — Svelte
Использован специальный элемент <svelte:window> для прослушивания событий от клавиатуры. Обработчики событий от клавиатуры и используемые в них переменные добавлены вне функции onMount().
5. Конец игры
6. Построение кирпичей
7. Определение столкновений
8. Счет и выигрыш
9. Контроль мышью
Pure JavaScript — Svelte
Добавлен обработчик событий от мыши также за пределами функции onMount.
10. Заключение
Как мы видим, практически весь код перенесен в приложение на Svelte без изменений. Игры обычно не пишут на чистом JS, а используют готовые HTML5 фреймворки. Например, эта же игра выполненная на фреймворке Phaser. Можно посмотреть эксперименты с WebGl на Svelte https://github.com/sveltejs/gl и идеи по svelte-gl https://github.com/Rich-Harris/svelte-gl.
Репозиторий на GitHub
https://github.com/nomhoi/svelte-breakout-game
Установка игры на локальном компьютере:
git clone git@github.com:nomhoi/svelte-breakout-game.git
cd svelte-breakout-game
npm install
npm run dev
Запускаем игру в браузере по адресу: http://localhost:5000/.