В Phaser 3 загрузка видеофайлов осуществляется через
встроенный менеджер загрузки ресурсов — Loader. Видео можно
использовать как спрайты, текстуры для объектов или как фоновое медиа.
Основная задача — корректно добавить видео в сцену и управлять его
воспроизведением.
Для начала необходимо использовать метод
this.load.video() в контексте сцены:
this.load.video('intro', 'assets/videos/intro.mp4', {
loadEvent: 'canplaythrough',
asTexture: true
});
Параметры метода:
'loadeddata',
'canplay', 'canplaythrough').true, видео будет
доступно как текстура для спрайтов и изображений.Использование asTexture: true позволяет работать с видео
так же, как с обычными изображениями в Phaser, что особенно полезно для
динамических эффектов или применения шейдеров.
После загрузки видео его можно добавлять на сцену:
const video = this.add.video(400, 300, 'intro');
video.setOrigin(0.5, 0.5);
video.play(true); // true — воспроизведение по кругу
Методы объекта Video:
loop указывает, будет ли видео повторяться.Видео в Phaser поддерживает собственные события, которые позволяют реагировать на прогресс загрузки и завершение воспроизведения:
video.on('complete', () => {
console.log('Видео завершилось');
});
video.on('play', () => {
console.log('Видео начато');
});
video.on('pause', () => {
console.log('Видео приостановлено');
});
Для событий загрузки можно использовать
this.load.on():
this.load.on('filecomplete-video-intro', () => {
console.log('Видео intro полностью загружено');
});
При указании asTexture: true видео можно использовать
для спрайтов:
const sprite = this.add.sprite(400, 300, 'intro');
sprite.setOrigin(0.5, 0.5);
Это позволяет применять стандартные методы Phaser для трансформации, вращения, масштабирования и взаимодействия с другими объектами сцены.
Phaser поддерживает MP4, WebM и Ogg. Для кроссбраузерной совместимости рекомендуется предоставлять видео в нескольких форматах и указывать их через массив:
this.load.video('cutscene', ['assets/video/cutscene.mp4', 'assets/video/cutscene.webm'], {
loadEvent: 'canplaythrough'
});
Чтобы снизить нагрузку на память и CPU, стоит использовать небольшие
размеры видео и корректно управлять их воспроизведением — останавливать
видео вне поля зрения камеры и не использовать asTexture,
если видео не требует обработки как текстуры.
loadEvent: 'canplaythrough' для уверенного воспроизведения
без подгрузки.fileprogress,
чтобы отображать индикатор загрузки.Видео можно интегрировать с игровыми объектами:
video.setDepth(-1).Использование видео в Phaser открывает возможности для динамичных сцен, кинематографических вставок и сложных визуальных эффектов, интегрированных в игровую логику.