Migrar de Phaser 3 a Phaser 4 es bastante menos traumático de lo que parece si tu juego utiliza principalmente Sprites, Images, Text, Tilemaps, input, física, escenas y tweens. La mayor parte de la API pública se mantuvo muy parecida. Los cambios importantes aparecen cuando el proyecto toca el renderer, pipelines WebGL, FX, masks, tint, iluminación o algunas APIs que fueron eliminadas.
Si tu juego usa principalmente objetos estándar de Phaser, la migración suele ser mucho más pequeña que una reescritura completa. El trabajo crece sobre todo cuando hay pipelines WebGL, shaders o integraciones avanzadas con el renderer.
¿Vale la pena migrar a Phaser 4?
Phaser 4 no es simplemente una actualización de versión. El renderer WebGL fue reconstruido y la arquitectura interna cambió bastante, pero el equipo de Phaser intentó mantener la API que utiliza la mayoría de desarrolladores lo más familiar posible.
Esto significa que muchos sistemas habituales continúan funcionando con pocos cambios:
No hagas la migración directamente sobre tu única copia del proyecto. Crea una rama o un backup y asegúrate de que la versión Phaser 3 funciona correctamente antes de empezar.
1. Crea una rama exclusiva para la migración
git checkout -b migrate/phaser-4
Antes de continuar, ejecuta el juego en Phaser 3 y revisa al menos:
- inicio y carga de assets;
- cambio entre escenas;
- input;
- física y colisiones;
- audio;
- efectos visuales;
- guardado;
- game over y reinicio.
2. Haz un inventario de las partes delicadas
setPipeline
PostFX
preFX
postFX
BitmapMask
setTintFill
Phaser.Geom.Point
Phaser.Struct.Set
Phaser.Struct.Map
Math.TAU
DynamicTexture
Si ninguna de esas piezas aparece y el proyecto usa objetos normales, probablemente estás ante una migración relativamente sencilla.
3. Actualiza Phaser
npm install phaser@4.2.1
Después inicia el proyecto sin intentar corregir nada por adelantado:
npm run dev
Los errores que aparezcan ahora se convierten en tu lista real de migración. Es mejor trabajar desde errores concretos que modificar cientos de líneas “por si acaso”.
4. Corrige el import de Phaser si utilizas NPM
Phaser 3
import Phaser from "phaser";
Phaser 4
import * as Phaser from "phaser";
Si cargas Phaser como variable global mediante CDN, este cambio concreto de import no aplica.
5. El renderer cambió por completo
Phaser 3 utilizaba un sistema basado en WebGL Pipelines. Phaser 4 lo reemplaza por una arquitectura basada en RenderNodes.
Phaser 3
- Pipelines WebGL personalizados.
- Más responsabilidad sobre el estado WebGL.
- Shaders y render custom muy ligados al pipeline.
Phaser 4
- Arquitectura mediante RenderNodes.
- Responsabilidades de render más separadas.
- Modelo más predecible para extensiones gráficas.
Si tu juego solo utiliza Sprite, Image, Text, Tilemap y otros objetos estándar, normalmente no necesitas reescribir nada por este cambio.
Si escribiste un Pipeline WebGL propio en Phaser 3, trátalo como una subtarea independiente. Esa parte debe migrarse al nuevo sistema de render nodes / filtros, no limitarse a un cambio de nombres.
6. FX y Masks ahora usan el nuevo sistema de Filters
- BitmapMask: fue eliminado y su funcionalidad pasa al nuevo Mask Filter.
- Bloom: ahora puede crearse mediante
Phaser.Actions.AddEffectBloom(). - Shine: ahora utiliza
Phaser.Actions.AddEffectShine(). - Circle: puede migrarse mediante
Phaser.Actions.AddMaskShape(). - Gradient: pasó a ser un Game Object propio.
- preFX / postFX: el modelo anterior fue sustituido por el nuevo sistema de filtros.
7. setTintFill() cambió
Phaser 3
player.setTintFill(0xff0000);
Phaser 4
player
.setTint(0xff0000)
.setTintMode(Phaser.TintModes.FILL);
Phaser 4 separa el color del modo y ofrece modos como MULTIPLY, FILL, ADD, SCREEN, OVERLAY y HARD_LIGHT.
8. La iluminación se activa de forma más directa
Phaser 3
player.setPipeline("Light2D");
Phaser 4
player.setLighting(true);
Si utilizas normal maps o iluminación personalizada, revisa esa escena completa y no solo una línea.
9. Phaser.Geom.Point desapareció
Phaser 3
const target = new Phaser.Geom.Point(
400,
300
);
Phaser 4
const target = new Phaser.Math.Vector2(
400,
300
);
10. Math.TAU ahora tiene su valor matemático correcto
En Phaser 3, Math.TAU tenía un valor equivalente a PI / 2. En Phaser 4 representa
correctamente una vuelta completa:
TAU = Math.PI * 2
Si tu código antiguo lo utilizaba esperando PI / 2, cambia a:
Phaser.Math.PI_OVER_2
11. Phaser.Struct.Set y Phaser.Struct.Map → JavaScript nativo
Antes
const enemies = new Phaser.Struct.Set();
const items = new Phaser.Struct.Map();
Después
const enemies = new Set();
const items = new Map();
Si utilizabas métodos específicos de las estructuras de Phaser, revisa sus equivalentes en Set y Map nativos.
12. DynamicTexture requiere render()
Si una textura dinámica aparece vacía después de migrar, revisa si falta ejecutar:
dynamicTexture.render();
13. Cámara: lo normal sigue funcionando
Scroll, zoom, rotation y follow suelen continuar sin cambios importantes. Si accedes directamente a matrices internas de cámara, sí debes revisar la implementación.
14. APIs que fueron eliminadas
- antiguos Game Objects Mesh y Plane;
- plugins Camera3D y Layer3D;
- soporte antiguo para IE9;
- plugins Spine incluidos antiguamente en Phaser ya no son el camino recomendado.
Phaser 4.2 introdujo un nuevo Game Object Mesh2D, pero no debes asumir que sea un reemplazo compatible línea por línea con el Mesh eliminado de Phaser 3.
15. roundPixels cambió de valor por defecto
En Phaser 4 roundPixels es false por defecto. Si tu pixel art dependía de esa
opción, haz la intención explícita:
render: {
roundPixels: true
}
16. Cuidado con compressed textures
Phaser 4 cambió la orientación interna de texturas para alinearse mejor con WebGL. Si utilizas texturas comprimidas, vuelve a generarlas para la orientación usada por Phaser 4.
17. Checklist de migración
- Backup / branchParte de una versión Phaser 3 que sabes que funciona.
- Actualiza la dependenciaInstala Phaser 4 y ejecuta antes de cambiar APIs al azar.
- Corrige importsSi utilizas NPM, cambia default import por wildcard import.
- Revisa renderer avanzadoPipelines y shaders personalizados son la parte de mayor riesgo.
- Migra FX, masks y tintSon cambios localizados pero muy visibles.
- Revisa APIs pequeñasVector2, TAU, Set, Map y DynamicTexture.
- Busca elementos eliminadosHazlo antes de invertir horas en la migración.
- Prueba el juego completoNo basta con que compile y muestre la primera Scene.
18. Qué probar después de que compile
Gameplay
- Input.
- Física.
- Colisiones.
- Tweens.
- Scenes.
Render
- FX.
- Masks.
- Tint.
- Luces.
- Texturas comprimidas.
Plataforma
- Chrome / Chromium.
- Firefox.
- Móvil real.
- Resize.
- Pérdida de foco.
Performance
- FPS.
- Frame time.
- Memoria.
- Carga inicial.
- Errores de consola.
¿Cuánto trabajo puede tomar?
La estrategia más práctica es actualizar, ejecutar y dejar que los errores reales te muestren la lista de trabajo.
Si empiezas un proyecto nuevo
Si no estás migrando un juego existente, arranca directamente con Phaser 4 y un entorno moderno.
Referencias oficiales
La clave es no tratar Phaser 4 como un framework completamente diferente. Migra primero lo que realmente rompió, prueba por bloques y deja renderer avanzado, shaders y efectos para una fase controlada.
No hay comentarios:
Publicar un comentario