Создание 2D игр на Phaser: пошаговое руководство
Введение в Phaser и установка среды разработки
Phaser — это популярный фреймворк для создания 2D игр на JavaScript. Он предоставляет мощные инструменты для работы с графикой, анимацией и взаимодействием. Начнем с установки среды разработки, чтобы вы могли быстро приступить к созданию своей первой игры.

Установка Node.js и npm
Для работы с Phaser потребуется Node.js и npm (Node Package Manager). Node.js позволяет запускать JavaScript на сервере, а npm управляет пакетами, необходимыми для разработки. Скачайте и установите их с официального сайта Node.js. Убедитесь, что установка прошла успешно, выполнив команды:
node -v
npm -v
Установка Phaser
Создайте новую папку для вашего проекта и откройте терминал в этой папке. Введите команду для инициализации нового проекта:
npm init -y
Теперь установите Phaser, который будет основой вашего игрового проекта:
npm install phaser
Настройка Webpack
Для удобства разработки используем Webpack, который позволяет собирать все модули и зависимости в один файл. Установите его и необходимые плагины:
npm install webpack webpack-cli webpack-dev-server html-webpack-plugin --save-dev
Создайте файл webpack.config.js и добавьте в него следующую конфигурацию. Этот файл определяет, как Webpack будет собирать ваш проект:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer: {
    contentBase: './dist'
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ],
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      }
    ]
  }
};
Создайте папку src и добавьте файлы index.js и index.html. Эти файлы будут основой вашего проекта:
<!-- src/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Phaser Game</title>
</head>
<body>
  <script src="bundle.js"></script>
</body>
</html>
// src/index.js
import Phaser from 'phaser';
const config = {
  type: Phaser.AUTO,
  width: 800,
  height: 600,
  scene: {
    preload: preload,
    create: create,
    update: update
  }
};
const game = new Phaser.Game(config);
function preload() {
  // Загрузка ресурсов
}
function create() {
  // Создание объектов
}
function update() {
  // Обновление сцены
}
Запустите сервер разработки, чтобы увидеть результат:
npx webpack serve
Создание первого проекта и настройка сцены
Теперь, когда среда разработки настроена, создадим первый проект и настроим сцену. Это включает в себя добавление фона, игровых объектов и настройку физики.
Настройка сцены
Добавим фон и основной игровой объект. В файле index.js обновите функцию preload для загрузки изображений. Это позволит вам использовать графику в вашей игре:
function preload() {
  this.load.image('sky', 'assets/sky.png');
  this.load.image('star', 'assets/star.png');
}
Создайте папку assets и добавьте туда изображения sky.png и star.png. Эти изображения будут использоваться в вашей игре.
В функции create добавьте код для создания фона и звезды. Это создаст визуальные элементы на экране:
function create() {
  this.add.image(400, 300, 'sky');
  const star = this.physics.add.image(400, 300, 'star');
  star.setCollideWorldBounds(true);
}
Добавление физики
Phaser поддерживает физические движки, такие как Arcade Physics. Добавим физику к звезде, чтобы она могла взаимодействовать с другими объектами:
function create() {
  this.add.image(400, 300, 'sky');
  const star = this.physics.add.image(400, 300, 'star');
  star.setCollideWorldBounds(true);
  star.setBounce(0.8);
}
Работа с графикой и анимацией
Теперь добавим анимацию и взаимодействие с графикой. Это сделает вашу игру более живой и интересной.
Анимация
Добавим анимацию вращения звезды. В функции update добавьте код для вращения. Это создаст эффект вращения звезды:
function update() {
  const star = this.physics.add.image(400, 300, 'star');
  star.rotation += 0.01;
}
Работа с текстурами
Phaser позволяет работать с текстурами и спрайтами. Добавим спрайт персонажа. В preload загрузите спрайт, который будет использоваться для анимации персонажа:
this.load.spritesheet('dude', 'assets/dude.png', { frameWidth: 32, frameHeight: 48 });
Создайте анимацию в create. Это определит, как будет анимироваться персонаж:
this.anims.create({
  key: 'left',
  frames: this.anims.generateFrameNumbers('dude', { start: 0, end: 3 }),
  frameRate: 10,
  repeat: -1
});
Добавьте персонажа и примените анимацию. Это создаст персонажа на экране и запустит анимацию:
const player = this.physics.add.sprite(100, 450, 'dude');
player.setBounce(0.2);
player.setCollideWorldBounds(true);
player.anims.play('left', true);
Добавление взаимодействия и управления
Теперь добавим управление персонажем с помощью клавиатуры. Это позволит игроку взаимодействовать с игрой.
Управление клавиатурой
Создайте объект для управления клавишами в create. Это позволит обрабатывать нажатия клавиш:
this.cursors = this.input.keyboard.createCursorKeys();
Обновите функцию update для обработки нажатий клавиш. Это позволит персонажу двигаться в зависимости от нажатых клавиш:
function update() {
  if (this.cursors.left.isDown) {
    player.setVelocityX(-160);
    player.anims.play('left', true);
  } else if (this.cursors.right.isDown) {
    player.setVelocityX(160);
    player.anims.play('right', true);
  } else {
    player.setVelocityX(0);
    player.anims.play('turn');
  }
  if (this.cursors.up.isDown && player.body.touching.down) {
    player.setVelocityY(-330);
  }
}
Добавление взаимодействия с объектами
Добавим платформы и взаимодействие с ними. В preload загрузите текстуру платформы:
this.load.image('ground', 'assets/platform.png');
Создайте платформы в create. Это создаст объекты, с которыми персонаж сможет взаимодействовать:
const platforms = this.physics.add.staticGroup();
platforms.create(400, 568, 'ground').setScale(2).refreshBody();
platforms.create(600, 400, 'ground');
platforms.create(50, 250, 'ground');
platforms.create(750, 220, 'ground');
Добавьте взаимодействие между игроком и платформами. Это позволит персонажу стоять на платформах и взаимодействовать с ними:
this.physics.add.collider(player, platforms);
Финальные штрихи и публикация игры
Теперь, когда основные элементы игры готовы, добавим финальные штрихи и подготовим игру к публикации. Это включает в себя добавление звуков, оптимизацию и сборку проекта.
Добавление звуков
Загрузите и добавьте звук в preload. Это позволит вам использовать звуковые эффекты в игре:
this.load.audio('jump', 'assets/jump.mp3');
Проиграйте звук при прыжке. Это добавит звуковой эффект, когда персонаж прыгает:
function update() {
  if (this.cursors.up.isDown && player.body.touching.down) {
    player.setVelocityY(-330);
    this.sound.play('jump');
  }
}
Оптимизация и сборка
Оптимизируйте игру, удалив ненужные файлы и комментарии. Соберите проект для публикации, чтобы он был готов к развертыванию:
npx webpack --mode production
Публикация
Загрузите собранные файлы на ваш сервер или используйте платформы для хостинга игр, такие как itch.io или GitHub Pages. Это позволит вам поделиться своей игрой с другими.
Теперь у вас есть базовое понимание создания 2D игр на Phaser. Продолжайте экспериментировать и улучшать свои навыки! 🚀
Читайте также
- Создание 3D игр на Godot: пошаговое руководство
- Создание игр на Amazon Lumberyard: основы и примеры
- Создание 3D игр на GameMaker: пошаговое руководство
- Создание игр на Construct: основы и примеры
- Создание 3D игр на NeoAxis: пошаговое руководство
- Лучшие движки для 3D игр
- Создание игр на Defold: основы и примеры
- Движки для различных языков программирования
- Создание 3D игр на Urho3D: пошаговое руководство
- Создание игр без программирования: платформы и инструменты