Estructura de carpetas

Organización del proyecto Phaser


A la hora de trabajar con Phaser (y prácticamente con cualquier proyecto), es conveniente tener una estructura de carpetas sólida para trabajar, que tenga bien definido donde debemos colocar los ficheros, para encontrarlos luego rápidamente. Probablemente, nuestro proyecto de Phaser tendrá muchos archivos, así que vamos a definir bien dicha estructura.

Estructura general

Cómo puedes ver a continuación, vamos a tener la siguiente estructura, donde hay tres niveles principales de carpetas, que tendrán sus ficheros y subcarpetas:

├── public/
│  └── assets/
│     ├── sounds/
│     └── sprites/
├── src/
│  ├── modules/
│  ├── scenes/
│  ├── index.html
│  ├── index.js
│  └── index.css
├── jsconfig.json
├── package.json
├── .eslintrc.json
└── vite.config.js
  • 1️⃣ La carpeta public/ tendrá los archivos estáticos (imágenes, sonidos, tipografías, música...)
  • 2️⃣ La carpeta src/ tendrá el código fuente del juego (javascript)
  • 3️⃣ La carpeta raíz del proyecto tendrá los archivos de configuración

La carpeta public

Nuestra carpeta public va a tener todos los archivos estáticos de nuestro juego. Lo recomendable sería crear una carpeta assets que incluirá todos estos archivos. En mi caso, suelo crear una subcarpeta sounds o fx para incluir ahí los efectos de sonido, una carpeta sprites para incluir las imágenes del juego, una carpeta music para incluir la música, una carpeta fonts para incluir las fuentes, etc...

La organización de carpetas depende del programador. Creo que esta es una buena estructura para empezar, aunque si el juego es muy grande y tiene muchos ficheros, quizás convendría segmentar más aún las carpetas y dividir más, por ejemplo, subcarpetas items, players, enemies dentro de sprites, etc.

La carpeta src

La carpeta src contendrá nuestros archivos de código javascript del proyecto. Empezaremos, como en cualquier proyecto frontend normal, por un archivo index.html que incluirá un archivo index.css que tendremos un poquito de CSS general (muy poco) y un archivo index.js que será nuestro punto de entrada para comenzar a trabajar con Phaser.

Por otro lado, empezamos con dos subcarpetas: modules y scenes. La carpeta modules contendrá pequeños módulos o ficheros .js con funciones o elementos de ayuda para nuestra aplicación. Pero probablemente, la carpeta más importante es scenes, que contendrá las escenas del juego.

¿Qué es una escena?

En Phaser, una de las unidades principales de un juego son las Escenas. Una escena es una parte del juego. Lo más sencillo es pensar en una «pantalla» de nuestro juego: la pantalla de carga, la pantalla del menú, la pantalla del juego, la pantalla de game over, etc.

Sin embargo, las escenas de Phaser van un poco más allá, e incluso pueden ser más modulares. Por ejemplo, una escena también puede ser pequeñas regiones con las que luego compondremos una escena más grande. Ejemplos: el HUD inferior de vida, energía y experiencia del juego, una ventana que aparece para indicar que el juego está pausado, etc.

De la misma forma, a medida que nuestro proyecto crezca, probablemente una sola carpeta de scenes sea insuficiente y debamos crear subcarpetas para organizar mejor el proyecto: characters/ para incluir personajes o NPC, items/ para el uso de objetos, etc.

Archivos de configuración

En nuestra carpeta raíz del proyecto tenemos varios archivos de configuración:

  • jsconfig.json: Este archivo contiene la información de rutas especiales. Por ejemplo, en nuestro caso tenemos definida una ruta especial llamada @ que apunta a la carpeta src. Por lo tanto, a la hora de importar módulos o ficheros .js no tenemos que hacerlo con ../ o similares, sino simplemente escribimos @/scenes/Game.js y ya el sistema lo encontrará. Así las rutas serán mucho más consistentes. Más información en evitar rutas relativas

  • package.json: Es el archivo de configuración del proyecto. Aquí tenemos las librerías y dependencias que utilizaremos. Más información sobre package.json.

  • .eslintrc.json: Nuestro linter de Javascript. Un sistema que se encargará de revisar y aconsejarte como escribir mejor el código Javascript. Más información sobre ESLint

  • vite.config.js: La configuración de Vite. Tenemos ciertos detalles preconfigurados para hacer mucho más fácil trabajar con el proyecto y tenerlo automatizado. Más información sobre Vite

Hay muchas formas de crear la estructura de nuestro proyecto, y es importante tener en cuenta que esta no es la única. Pero si creo que con esta información, ya estamos preparados para comenzar a escribir el código de un proyecto de Phaser de la forma más sencilla y cómoda posible, así que comenzaremos con ello en los siguientes artículos.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev