Для мониторинга производительности игры и выявления узких мест используется библиотека Stats.js. Она позволяет визуально отображать FPS, время рендеринга и другие показатели в реальном времени.
Stats.js можно подключить через npm:
npm install stats.js
Или добавить через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/stats.js/r17/Stats.min.js"></script>
После подключения создается экземпляр Stats и добавляется в DOM:
const stats = new Stats();
stats.showPanel(0); // 0 — FPS, 1 — миллисекунды, 2 — память
document.body.appendChild(stats.dom);
Для корректного профилирования каждый кадр нужно оборачивать в stats.begin() и stats.end():
this.events.on('step', () => {
stats.begin();
// основной игровой код
stats.end();
});
Использование Stats.js вместе с Phaser позволяет отследить производительность сцены, выявить падение FPS при большом количестве объектов или тяжелой анимации.
Phaser предоставляет встроенный Debug Plugin, который упрощает визуализацию и диагностику объектов на сцене.
В Phaser 3 Debug Plugin добавляется через конфигурацию сцены:
this.plugins.installScenePlugin({
key: 'DebugPlugin',
plugin: Phaser.Plugins.DebugPlugin,
mapping: 'debug'
});
После этого объект this.debug становится доступен в
сцене.
Отображение тела физики:
this.debug.body(sprite) Позволяет увидеть границы
физического тела объекта, полезно при работе с Arcade Physics и
Matter.js.
Отрисовка коллайдеров:
this.debug.geom(collider.getBounds(), 0xff0000);
Выводит границы коллайдеров, помогает выявить ошибки при пересечении объектов.
Вывод информации о спрайте:
this.debug.spriteInfo(sprite, 32, 32);
Показывает позицию, размер и активность объекта на экране.
Отображение текста и графических элементов:
Можно комбинировать с this.add.graphics() для отрисовки
линий, прямоугольников и других форм для отладки.
Совмещение Stats.js и Debug Plugin позволяет получить полный контроль над производительностью:
class GameScene extends Phaser.Scene {
constructor() {
super({ key: 'GameScene' });
}
preload() {
this.load.image('player', 'assets/player.png');
}
create() {
// Stats.js
this.stats = new Stats();
this.stats.showPanel(0);
document.body.appendChild(this.stats.dom);
// Debug Plugin
this.plugins.installScenePlugin({
key: 'DebugPlugin',
plugin: Phaser.Plugins.DebugPlugin,
mapping: 'debug'
});
this.player = this.physics.add.sprite(100, 100, 'player');
}
update() {
this.stats.begin();
// Движение игрока и логика
this.player.x += 1;
// Отладка тела
this.debug.body(this.player);
this.stats.end();
}
}
В этом примере каждый кадр отображается FPS, а тело игрока визуализируется для проверки точности физики.
При большом количестве спрайтов Debug Plugin может замедлять игру. Используется выборочная отладка:
if (this.player.x > 200) {
this.debug.body(this.player);
}
Это позволяет профилировать только ключевые объекты.
Для анализа производительности можно выводить данные из Stats.js в консоль:
console.log(`FPS: ${Math.round(stats.getFPS())}`);
console.time() для глубокого
анализа производительности.Эти методы создают комплексный подход к профилированию и отладке в Phaser, позволяя не только визуализировать объекты и их физику, но и измерять реальную нагрузку на игру.