Разработка простой игры на phaser.io. Продолжение.
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
Это запускает простейший питоний сервер, которого вполне достаточно для отладки.