Разработка простой игры на phaser.io. Продолжение.

02.08.2017 at 19:15

StateManager в phaser.io

Во всех игровых движках есть какой-либо способ управления различными состояниями игры. В phaser за это отвечает StateManager. Доступ к нему осуществляется с помощью свойства game.state.
Добавляется новое состояние с помощью метода

game.state.add('gameOver', gameOverState);

Состояние представляет собой объект, который может реализовать несколько предопределенных функций.

var gameState = {
    create: function () {
    },
    update: function () {
    },
    preload: function () {
    },
    init: function (param) {
    }
}

Есть и другие функции, полный список можно посмотреть в API.

Переход к нужному состоянию выглядит вот так:

game.state.start('play');

Передача данных между состояниями

метод game.state.start принимает аргументы:
key — имя состояниями
clearWorld — признак необходимости очистки игровых объектов. По умолчанию true
clearCache — признак необходимости сброса кеша загруженных ассетов. По умолчанию false
parameters — все последующие аргументы будут переданы в функцию init() загружаемого состояния

например вот так я передаю набранные очки из состояния игры в состояние проигрыша:

game.state.start('gameOver', true, false, this.score);
...
var gameOverState = {
    init: function (finalScore) {
        this.score = finalScore;
    },
    ...
}

Перенос текста на следующую строку при необходимости

В метод game.add.text передается стиль текста, в котором можно указать необходимость переноса текста и ширину текста

game.add.text(16, 16, 'Press enter to start the game', { fontSize: '32px', fill: '#000', wordWrap: true, wordWrapWidth: game.width });

Запуск локального сервера для отладки

phaser для отладки требует запущенного локального веб сервера для отдачи статики (это используется для загрузки ассетов). Для этого я в корень каждого проекта добавляю файл run.sh с командой

python -m SimpleHTTPServer

Это запускает простейший питоний сервер, которого вполне достаточно для отладки.