20/10/2016
Adentrarse en el mundo del desarrollo de videojuegos puede parecer una tarea titánica, pero con las herramientas adecuadas y una guía clara, es un viaje increíblemente gratificante. GameMaker es una de las plataformas más accesibles para principiantes, y hoy te llevaremos de la mano para que construyas, desde cero, tu primer nivel. No será un simple escenario vacío, sino un nivel de plataformas funcional donde un personaje podrá moverse, saltar, esquivar peligros y alcanzar una meta. Al final de este artículo, no solo tendrás un mini-juego jugable, sino también los conocimientos fundamentales para empezar a crear tus propios mundos.

Este tutorial está diseñado para ser lo más claro posible, explicando no solo el "cómo" sino también el "porqué" de cada paso. Nos enfocaremos en los tres pilares de cualquier juego en GameMaker: los Sprites (las imágenes), los Objetos (la lógica) y las Rooms (los niveles). ¡Prepárate para dar vida a tus ideas!
Preparando el Terreno: Tu Nuevo Proyecto
Lo primero es lo primero: abre GameMaker y crea un nuevo proyecto en blanco. Al hacerlo, te encontrarás con la interfaz principal. Puede que veas muchas ventanas y opciones, pero no te abrumes. Por ahora, nuestra atención se centrará casi exclusivamente en el Navegador de Assets, que usualmente se encuentra en el lado derecho de la pantalla.
El Navegador de Assets es el corazón de tu proyecto; es el inventario donde vivirán todos los componentes de tu juego. Para nuestro proyecto de plataformas, nos concentraremos en tres carpetas fundamentales:
- Sprites: Aquí es donde se almacenan todas las imágenes y animaciones. Piensa en ellos como los actores y el atrezo de tu obra de teatro.
- Objects: Son el cerebro detrás de los sprites. Un objeto toma un sprite (su apariencia) y se le añade código para darle comportamiento y lógica. Es la diferencia entre una foto de un personaje y el personaje mismo.
- Rooms: Una "Room" (habitación) es, en esencia, un nivel o una pantalla del juego. Es el escenario donde colocas tus objetos para que interactúen entre sí.
Para mantener nuestro espacio de trabajo limpio, puedes eliminar las otras carpetas que no usaremos, como Sonidos, Fuentes o Scripts, haciendo clic derecho sobre ellas y seleccionando "Eliminar".
Dando Vida al Mundo: Creación de Sprites
Un juego sin gráficos es solo código. Los sprites son los que le dan identidad visual. Vamos a crear todos los elementos visuales que necesitaremos para nuestro nivel.
Para crear un sprite, haz clic derecho en la carpeta "Sprites" del Navegador de Assets y selecciona "Crear" -> "Sprite". Es una buena práctica de programación nombrar tus assets de forma organizada. Usaremos un prefijo para cada tipo de asset. Para los sprites, usaremos "s".
- sPlayer: El sprite de nuestro personaje principal.
- sPared: El sprite para el suelo y las plataformas. Un simple bloque sólido servirá.
- sPincho: El obstáculo que nuestro jugador deberá evitar.
- sBandera: La meta del nivel.
Para cada sprite, puedes hacer doble clic para abrir el Editor de Sprites. Aquí puedes dibujar tu propio arte pixel por pixel o, si lo prefieres, hacer clic en el botón "Importar" para cargar imágenes que hayas creado previamente o descargado. Para este tutorial, asumiremos que tienes unas imágenes simples de 16x16 píxeles para cada elemento.
El Cerebro de la Operación: Los Objetos
Ahora que tenemos la apariencia de nuestros elementos, necesitamos darles vida y funcionalidad. Aquí es donde entran los objetos. Crearemos un objeto por cada sprite, usando el prefijo "o" para organizarlos.
Haz clic derecho en la carpeta "Objects" y selecciona "Crear" -> "Objeto".
- oPlayer: Abre este objeto y, en su ventana de propiedades, haz clic donde dice "No Sprite" y asigna el sprite sPlayer.
- oPared: Asigna el sprite sPared.
- oPincho: Asigna el sprite sPincho.
- oBandera: Asigna el sprite sBandera.
Al seleccionar un objeto, verás a la derecha la ventana de Eventos. Un evento es un disparador que ejecuta un bloque de código cuando ocurre algo específico (por ejemplo, cuando el objeto se crea, cuando se presiona una tecla, o en cada fotograma del juego). Aquí es donde programaremos todo el comportamiento.
Construyendo el Nivel: Configuración de la "Room"
Con nuestros actores (objetos) listos, es hora de ponerlos en el escenario (la room). Dirígete a la carpeta "Rooms" y haz doble clic en `Room1` para abrir el Editor de Rooms. Verás una gran cuadrícula negra, que es tu nivel.

Por defecto, el tamaño es bastante grande. Vamos a ajustarlo. En el panel de propiedades de la habitación (generalmente en la parte inferior izquierda), cambia el ancho (Width) a 320 y el alto (Height) a 180. Esto nos dará un área de juego más pequeña y manejable.
Para colocar objetos, primero ajusta el tamaño de la rejilla (Grid) a 16x16. Esto hará que los objetos se alineen perfectamente, asumiendo que tus sprites son de ese tamaño. Ahora, simplemente arrastra los objetos desde el Navegador de Assets y suéltalos en la habitación. También puedes seleccionar un objeto y, manteniendo presionada la tecla `Alt`, "pintar" con él en el nivel.
Diseña un pequeño desafío: coloca `oPared` para crear un suelo y algunas plataformas, añade algunos `oPincho` como obstáculos, sitúa la `oBandera` al final y, por supuesto, no olvides colocar una instancia de `oPlayer` al inicio.
El Código del Movimiento: Programando al Jugador
Nuestro nivel está montado, pero si le das a "Jugar" (F5), no pasará nada. El jugador no se moverá. Es hora de escribir algo de código. Todo el siguiente código se añadirá en los eventos del objeto `oPlayer`.
Evento Create: La Inicialización
Este evento se ejecuta una sola vez, justo cuando el jugador aparece en el nivel. Es el lugar perfecto para configurar variables iniciales. Añade un evento "Create" a `oPlayer`.
Primero, ajustaremos el tamaño de la ventana del juego para que sea más grande que nuestra room, escalando el contenido.
window_set_size(1280, 720);Luego, crearemos variables para controlar la velocidad horizontal y vertical de nuestro jugador. Las llamaremos `xsp` (x-speed) y `ysp` (y-speed).
xsp = 0; ysp = 0;Evento Step: Lógica Continua
El evento Step es el corazón del juego en tiempo real. El código aquí se ejecuta en cada fotograma (usualmente 60 veces por segundo). Es ideal para manejar el movimiento, las colisiones y la entrada del jugador.
Añade un evento "Step" a `oPlayer` y escribe el siguiente código, que explicaremos por partes.

1. Gravedad y Movimiento Horizontal:
// Aplicar gravedad ysp += 0.1; // Resetear velocidad horizontal xsp = 0; // Comprobar teclas de movimiento if (keyboard_check(vk_left)) { xsp = -1; } if (keyboard_check(vk_right)) { xsp = +1; }Primero, aumentamos `ysp` en una pequeña cantidad en cada fotograma. Esto simula la gravedad, haciendo que el jugador acelere hacia abajo. Luego, comprobamos si se están pulsando las teclas izquierda o derecha y ajustamos la velocidad horizontal `xsp` en consecuencia.
2. Salto y Colisión con el Suelo:
// Comprobar si estamos en el suelo para saltar if (place_meeting(x, y + 1, oPared)) { ysp = 0; if (keyboard_check(vk_up)) { ysp = -2; } }Esta parte es crucial. `place_meeting(x, y + 1, oPared)` comprueba si, un píxel por debajo de la posición actual del jugador, hay un objeto `oPared`. Si es así, significa que estamos en el suelo. En ese caso, detenemos la velocidad vertical (`ysp = 0`) para que no siga cayendo, y si el jugador presiona la tecla de arriba, le damos una velocidad vertical negativa para que salte.
3. Mover y Colisionar:
// Mover el personaje y detenerse ante las paredes x += xsp; y += ysp; // Colisión Horizontal if (place_meeting(x, y, oPared)) { while (!place_meeting(x - sign(xsp), y, oPared)) { x -= sign(xsp); } xsp = 0; } // Colisión Vertical if (place_meeting(x, y, oPared)) { while (!place_meeting(x, y - sign(ysp), oPared)) { y -= sign(ysp); } ysp = 0; }Este bloque de código primero aplica el movimiento (`x += xsp`, `y += ysp`) y luego gestiona las colisiones de una manera precisa para evitar que el personaje se quede atascado dentro de las paredes.
4. Interacciones con Pinchos y Bandera:
// Comprobar colisión con la bandera (ganar) if (place_meeting(x, y, oBandera)) { room_goto_next(); } // Comprobar colisión con los pinchos (perder) if (place_meeting(x, y, oPincho)) { room_restart(); }Finalmente, comprobamos si el jugador está tocando la bandera. Si es así, `room_goto_next()` carga el siguiente nivel. Si toca un pincho, `room_restart()` reinicia el nivel actual.
Expandiendo el Juego: Creación de Múltiples Niveles
¡Prueba el juego! Presiona F5. Ahora deberías poder moverte, saltar, morir si tocas los pinchos y... ¡el juego se cerrará si tocas la bandera! Esto ocurre porque `room_goto_next()` no encuentra una "siguiente habitación".
La solución es simple: ¡crear más niveles! En el Navegador de Assets, haz clic derecho en `Room1` y selecciona "Duplicar". Esto creará una copia exacta llamada `Room2`. GameMaker las ordenará automáticamente, por lo que `Room2` será ahora el siguiente nivel.
Abre `Room2` y modifica el diseño. Hazlo más difícil, añade más plataformas, cambia la posición de la bandera. Puedes crear tantas habitaciones como quieras, duplicando la última y modificándola.
Tabla Comparativa de Eventos Comunes
Para entender mejor dónde poner tu código, aquí tienes una tabla con los eventos más utilizados en GameMaker.
| Evento | ¿Cuándo se ejecuta? | Uso Común |
|---|---|---|
| Create | Una sola vez, al crear la instancia del objeto. | Inicializar variables, configurar el estado inicial. |
| Step | En cada frame del juego (usualmente 30 o 60 veces por segundo). | Lógica continua, movimiento, colisiones, inputs. |
| Draw | En cada frame, después del evento Step. | Dibujar sprites, texto, formas. Anular el dibujo automático. |
| Collision | Cuando dos objetos con máscaras de colisión se superponen. | Gestionar interacciones específicas (ej: jugador con enemigo). |
Preguntas Frecuentes (FAQ)
- ¿Por qué mi personaje se mueve a través de las paredes?
- Asegúrate de que tu objeto de pared (`oPared`) esté incluido en el código de colisión del evento Step del jugador. Un error común es escribir mal el nombre del objeto en la función `place_meeting`.
- ¿Cómo puedo hacer que el salto sea más alto?
- En el evento Step del jugador, busca la línea `ysp = -2;`. Cambia el `-2` por un número negativo más grande (por ejemplo, `-5`) para aumentar la fuerza del salto.
- Mi juego se cierra al terminar el último nivel, ¿qué hago?
- Esto es normal, ya que no hay un "siguiente nivel" al que ir. Un buen siguiente paso sería crear una habitación final de "¡Has ganado!" y, en el último nivel, en lugar de `room_goto_next()`, usar `room_goto(nombre_de_tu_room_final)`.
- ¿Puedo usar mis propias imágenes para los sprites?
- ¡Por supuesto! En el Editor de Sprites, en lugar de dibujar, usa el botón "Importar" para cargar tus propios archivos de imagen (como .png) y úsalos en tu juego.
Conclusión
¡Felicidades! Has creado con éxito tu primer nivel funcional en GameMaker. Has aprendido los conceptos básicos de sprites, objetos, eventos y rooms, y has escrito código para controlar a un personaje. Aunque este es un juego muy simple, los principios que has aplicado son la base de casi cualquier juego que puedas imaginar.
A partir de aquí, el cielo es el límite. Intenta añadir nuevas mecánicas: enemigos que se mueven, monedas para recolectar, animaciones para el jugador, o efectos de sonido. El viaje del desarrollo de juegos consiste en dar pequeños pasos, construir sobre lo que ya sabes y, lo más importante, ¡divertirse creando! ¡Feliz desarrollo!
Si quieres conocer otros artículos parecidos a Crea tu Primer Nivel en GameMaker: Guía Completa puedes visitar la categoría Juegos.
