Usando Phaser con CDN

Primer ejemplo sin usar npm


Como hemos comentado, Phaser se puede utilizar puramente en un navegador, sin necesidad de utilizar NodeJS, npm, linters, etc. Sólo escribiendo un index.html y un index.js. Sin embargo, esta opción sólo la recomiendo para empezar o para ejemplos muy, muy básicos, ya que aunque al principio resulta muy fácil, pero a medida que el juego crece, es más difícil mantener tu código organizado y legible.

No obstante, para ver un ejemplo sencillo de Phaser y entender su funcionamiento principal, es un enfoque ideal, así que vamos a repasarlo un primer ejemplo muy sencillo.

Crear un index.html

Vamos a crear un archivo index.html, que es el archivo principal que cargará nuestra web con el juego de Phaser. Si hay algo que desconoces de HTML, puedes revisar LenguajeHTML para aprenderlo:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Juego Phaser</title>
  <script type="module"></script>
</head>
<body>

</body>
</html>

Observa la etiqueta <script>. Hemos indicado un type="module" para que el navegador pueda cargar módulos Javascript a través del import que utilizaremos en breve.

Usando Phaser con un CDN

Aunque podríamos hacerlo a la vieja usanza, y añadir otro <script> con la librería de Phaser, vamos a optar por hacerlo de una forma un poco más moderna, y utilizar el import con una dirección de un CDN (jsdelivr) con la librería de Phaser:

import * as Phaser from "https://cdn.jsdelivr.net/npm/[email protected]/+esm";

Esto irá incluido en la etiqueta <script>, seguido del código de nuestro juego de Phaser. Estamos haciendolo de esta forma para evitar tener que instalar Node, npm y otras herramientas. Pero recuerda que a la larga, jugará en nuestra contra y sólo servirá en casos muy concretos o para los ejercicios iniciales.

Estructura del juego

La explicaremos en profundidad más adelante, pero tener una pequeña idea de como funciona, la estructura básica del juego será la siguiente:

  • 1️⃣ Una clase Screen, que será la escena de nuestro juego, donde ocurren las cosas.
  • 2️⃣ Un método preload(), donde se precargarán los recursos (imágenes, sonidos, etc...)
  • 3️⃣ Un método create(), donde se creará la escena y sus elementos.
  • 4️⃣ Un objeto config, con la configuración (resolución, título, escenas, etc....)
  • 5️⃣ Un objeto game, instancia principal del juego.
class Screen extends Phaser.Scene {
  preload() { /* ... */ }
  create() { /* ... */ }
}

const config = {
  /* ... */
};

const game = new Phaser.Game(config);

El código final que incluiríamos en el <script> sería el siguiente:

  • Precargamos la imagen phaser.png con el nombre logo
  • Añadimos la imagen logo en la posición 300x150 y reducimos el tamaño (escala)
  • Añadimos el texto Mi primer juego de Phaser con ciertas características
import * as Phaser from "https://cdn.jsdelivr.net/npm/[email protected]/+esm";

class Screen extends Phaser.Scene {
  preload() {
    this.load.image("logo", "/phaser/introduccion/primeros-pasos/phaser.png");
  }

  create() {
    this.add.image(300, 150, "logo").setScale(0.5);

    this.add.text(0, 350, "Mi primer juego de Phaser", {
      font: "16px Courier",
      fill: "#ffffff",
      align: "center",
      fixedWidth: 600
    });
  }
}

const config = {
  type: Phaser.AUTO,
  width: 600,
  height: 400,
  autoCenter: Phaser.Scale.Center.CENTER_BOTH,
  scene: [ Screen ],
  title: "Primer juego de Phaser",
  version: "1.0"
};

const game = new Phaser.Game(config);

Aquí lo tenemos. No es un juego propiamente dicho, ya que sólo estamos mostrando una imagen y un texto, pero sin duda, es un primer paso para ir añadiendo funcionalidades y detalles y comprender como crearlo.

Es posible que si estás arrastrando el index.html al navegador, el juego no cargue correctamente y en la consola aparezca un error de CORS. Esto ocurre porque no se pueden utilizar ciertas funcionalidades avanzadas de Javascript si no estás utilizadno un servidor de desarrollo, que sería lo ideal.

Mi recomendación es que hagas algunas pruebas y juegues un poco en Codepen con el código anterior, y si te gusta Phaser, te tomes un tiempo en seguir las instrucciones de instalación de mkweb, comprendas la estructura de carpetas y sigas los primeros pasos con Phaser, utilizando NodeJS, npm y las herramientas que te aconsejo para que sea mucho más fácil y cómodo desarrollar con Phaser.

¿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