How do I create a project in GameMaker?

Crea tu Propio Asteroids con GameMaker

21/03/2018

Valoración: 4.32 (2428 votos)

¿Alguna vez has soñado con crear tu propio videojuego? Clásicos como Asteroids no solo son increíblemente divertidos, sino que también son el proyecto perfecto para iniciarse en el mundo del desarrollo. En esta guía completa, te llevaremos de la mano para que construyas tu propia versión de este icónico shooter espacial utilizando GameMaker. No necesitas experiencia previa, solo ganas de aprender y crear. Dividiremos el proceso en tres fases claras y sencillas: programar el movimiento de la nave, hacer que los asteroides exploten y dar los toques finales a tu juego. ¡Descarga GameMaker y prepárate para el despegue!

Índice de Contenido

Preparando el Terreno: Tu Nuevo Proyecto

Lo primero es lo primero. Al abrir GameMaker, te encontrarás con la pantalla de bienvenida. Aquí es donde comienza nuestra aventura.

How do I create a project in GameMaker?
Open GameMaker. You'll see a “ New ” button – click on it. Here you can start with a blank project, or choose a template. For this game, let's use the " Space Rocks " template. This gives you all the images for this tutorial. Enter a " Project Name ", and hit " Let's Go! ". You're now in your project!

Creación del Proyecto

Busca y haz clic en el botón "Nuevo". GameMaker te ofrecerá la opción de empezar con un proyecto en blanco o utilizar una plantilla. Para acelerar el proceso y centrarnos en la programación, utilizaremos la plantilla "Space Rocks". Esta plantilla ya incluye todos los gráficos (sprites) que necesitaremos: la nave, el disparo y los asteroides.

Asigna un nombre a tu proyecto, como "MiJuegoDeAsteroides", y haz clic en "¡Vamos!". ¡Felicidades, acabas de crear tu primer proyecto en GameMaker!

Explorando el Navegador de Activos

A la derecha de la pantalla verás el "Navegador de Activos" (Asset Browser). Este es el corazón de tu proyecto, donde se organizan todos sus componentes. Gracias a la plantilla, ya verás una carpeta llamada "Sprites" con cuatro imágenes:

  • spr_player: La nave espacial que controlarás.
  • spr_bullet: El proyectil que dispararás.
  • spr_rock_big y spr_rock_small: Los dos tamaños de asteroides.

Un sprite es solo una imagen. Para que haga algo, necesitamos asociarlo a un Objeto.

Dando Vida a los Sprites: Creación de Objetos

Un Objeto es la representación programable de un elemento en tu juego. Es aquí donde añadiremos código para que la nave se mueva, los disparos vuelen y los asteroides se rompan. Crearemos cuatro objetos esenciales.

Paso a Paso: Creando tus Objetos

  1. Haz clic derecho sobre el grupo "Objects" en el Navegador de Activos y selecciona "Crear -> Objeto".
  2. Se abrirá el editor de objetos. Lo primero es cambiarle el nombre. Nombra tu primer objeto como obj_player.
  3. Un objeto necesita una apariencia. Haz clic donde dice "Sin Sprite" y selecciona spr_player de la lista.

¡Excelente! Ahora repite este proceso para los otros tres objetos que necesitamos:

  • obj_bullet: Asígnale el sprite spr_bullet.
  • obj_rock: Asígnale el sprite spr_rock_big (todos los asteroides empezarán siendo grandes).
  • obj_game: Este será un objeto "invisible" que gestionará reglas generales como la puntuación y el reinicio del juego. No necesita un sprite.

Tabla Resumen de Objetos

Para tenerlo claro, aquí tienes un resumen de los objetos que acabas de crear y su propósito:

Nombre del ObjetoSprite AsignadoFunción Principal
obj_playerspr_playerLa nave controlada por el jugador.
obj_bulletspr_bulletEl proyectil que dispara la nave.
obj_rockspr_rock_bigEl asteroide que se debe destruir.
obj_gameNingunoControlador invisible para la puntuación y el estado del juego.

El Escenario del Conflicto: Configurando la Habitación

Una "Habitación" (Room) en GameMaker es el nivel o el espacio donde ocurre el juego. Tu proyecto ya viene con una por defecto, llamada "Room1". Haz doble clic sobre ella para abrir el Editor de Habitaciones.

A la izquierda, en la ventana "Inspector", ajusta el Ancho (Width) y Alto (Height) a 1000. Esto nos dará un campo de batalla cuadrado y espacioso.

Ahora, vamos a poblar nuestro nivel. Asegúrate de tener seleccionada la capa "Instances" a la izquierda. Arrastra desde el Navegador de Activos el objeto obj_player y suéltalo en el centro de la habitación. Luego, arrastra varias veces el objeto obj_rock y distribuye unos seis asteroides por el escenario. Cada objeto que colocas en la habitación se llama "instancia".

¡A los Controles! Programando la Nave

Si ejecutas el juego ahora (pulsando F5), verás una escena estática. Es hora de añadir la programación. Esto se hace a través de Eventos. Un evento es un momento específico en el que se ejecuta un bloque de código (por ejemplo, "al crear el objeto", "en cada fotograma", "al colisionar con otro objeto").

Abre el objeto obj_player. En la ventana de Eventos, haz clic en "Añadir Evento" y selecciona "Step". El evento Step se ejecuta en cada fotograma del juego, es perfecto para comprobar continuamente si el jugador está pulsando alguna tecla.

Movimiento y Rotación

Dentro del evento Step, añade el siguiente código GML:

// Impulso hacia adelante if keyboard_check(vk_up) { motion_add(image_angle, 0.1); } // Rotación de la nave if keyboard_check(vk_left) { image_angle += 4; } if keyboard_check(vk_right) { image_angle -= 4; }

Este código hace tres cosas: si se pulsa la flecha arriba, añade un pequeño impulso en la dirección a la que apunta la nave (`image_angle`). Si se pulsan las flechas izquierda o derecha, modifica ese ángulo para hacerla girar.

Efecto de Bucle (Wrap)

Un problema: si la nave sale de la pantalla, se pierde para siempre. ¡No en nuestro juego! Añade esta línea al final del evento Step, fuera de cualquier `if`:

move_wrap(true, true, 0);

Esta simple función hace que si una instancia sale por un lado de la habitación, reaparezca por el lado opuesto. ¡El movimiento de la nave está listo!

¡Fuego a Discreción! Disparos y Asteroides

Una nave espacial necesita poder defenderse. Vamos a implementar el disparo.

Creando Proyectiles

En el mismo evento Step del obj_player, añade este código:

// Disparar if mouse_check_button_pressed(mb_left) { instance_create_layer(x, y, "Instances", obj_bullet); }

Ahora, al hacer clic izquierdo, se creará una instancia del objeto obj_bullet en la misma posición (`x`, `y`) que la nave.

Comportamiento de la Bala

Las balas aparecen, pero no se mueven. Abre el objeto obj_bullet y añádele el evento "Create". Este evento se ejecuta solo una vez, justo cuando se crea la instancia.

// Heredar dirección y añadir velocidad speed = 10; direction = obj_player.image_angle;

Con esto, la bala se moverá a una velocidad de 10 en la misma dirección a la que apuntaba la nave al disparar. Para evitar que miles de balas existan para siempre, añádele el evento "Other -> Outside Room" y dentro, pon este código:

instance_destroy();

Ahora las balas se autodestruyen al salir de la pantalla, optimizando el rendimiento.

Movimiento de los Asteroides

Los asteroides también necesitan vida. Abre obj_rock, añádele el evento Create y el siguiente código:

// Movimiento y rotación inicial aleatorios speed = 1; direction = random(360); image_angle = random(360);

Para que también hagan "wrap" y roten constantemente, añádele un evento Step con este código:

move_wrap(true, true, 100); image_angle += 1;

Usamos un margen de 100 en `move_wrap` para que la transición sea más suave y ocurra fuera de la vista del jugador.

El Caos Cósmico: Colisiones y Lógica de Juego

Llegó el momento más esperado: la destrucción. Las colisiones son un tipo de evento fundamental.

Bala contra Asteroide

Vamos a programar qué pasa cuando una bala choca con un asteroide. Lo haremos desde la perspectiva del asteroide. En el objeto obj_rock, añade un evento "Collision" con obj_bullet. Dentro, escribe este complejo pero poderoso bloque de código:

// Destruir la bala que ha colisionado instance_destroy(other); // Añadir puntos obj_game.points += 50; // Crear un efecto de explosión effect_create_above(ef_explosion, x, y, 1, c_white); // Lógica de división de asteroides if (sprite_index == spr_rock_big) { // Si es grande, se convierte en pequeño y se duplica sprite_index = spr_rock_small; instance_copy(true); direction = random(360); // Cambia de dirección } else { // Si es pequeño, reaparece como grande si hay pocos asteroides if (instance_number(obj_rock) < 12) { sprite_index = spr_rock_big; x = -100; // Mover fuera de la pantalla para reingresar y = random(room_height); } else { // Si hay muchos, simplemente se destruye instance_destroy(); } }

Desglosemos: primero, destruimos la bala (`other` se refiere a la otra instancia en la colisión). Luego, creamos un efecto y añadimos puntos al marcador (que crearemos en breve). Después, la lógica clave: si el asteroide es grande, cambia su sprite a pequeño y se clona, creando dos asteroides pequeños. Si ya es pequeño, comprueba cuántos asteroides hay en total. Si son menos de 12, reaparece como uno grande fuera de la pantalla. Si no, se destruye para no saturar el juego.

El Fin del Juego... y la Gloria: Puntuación y Reinicio

Nuestro juego ya es funcional, pero le falta el ciclo de "ganar/perder" y una forma de medir la habilidad: la puntuación.

Game Over

En el objeto obj_player, añade un evento de colisión con obj_rock. Cuando la nave choque con un asteroide, sucederá lo siguiente:

effect_create_above(ef_firework, x, y, 1, c_white); instance_destroy(); obj_game.alarm[0] = 120; // Activa la alarma 0 en obj_game en 2 segundos (120 frames)

Destruimos la nave y activamos una Alarma en nuestro objeto `obj_game`. Una alarma es un temporizador. ¿Por qué en `obj_game`? Porque si la activamos en el jugador, al destruirse la instancia del jugador, la alarma nunca se ejecutaría. ¡No olvides arrastrar una instancia de `obj_game` a tu habitación! Colócala en cualquier esquina, es invisible.

Ahora, ve al objeto obj_game, añade el evento "Alarm 0" y dentro, coloca:

room_restart();

Pasados dos segundos de la muerte del jugador, el nivel se reiniciará.

Sistema de Puntuación

En el objeto obj_game, añade el evento "Create" y pon:

points = 0;

Esto crea una variable `points` al inicio del juego. Ahora, para mostrarla, añade el evento "Draw -> Draw GUI". El evento Draw GUI es una capa de dibujo que siempre se muestra por encima del juego, ideal para interfaces.

draw_text(10, 10, "Puntuación: " + string(points));

Esto dibujará el texto "Puntuación: " seguido del valor de nuestra variable en la esquina superior izquierda. El código que añadimos antes en la colisión del asteroide (`obj_game.points += 50;`) ya se encarga de incrementarla.

¡Juego Terminado! ¿Y ahora qué?

¡Lo has conseguido! Tienes un bucle de juego completo y funcional. Has aprendido a manejar sprites, objetos, eventos, colisiones, alarmas y a dibujar en pantalla. Este es un gran primer paso en tu viaje como desarrollador.

A partir de aquí, el cielo es el límite. Podrías añadir:

  • Efectos de sonido y música.
  • Diferentes tipos de enemigos o asteroides.
  • Power-ups para la nave (disparo triple, escudo).
  • Un sistema de vidas.
  • Pantallas de menú y de "Game Over".

Preguntas Frecuentes (FAQ)

¿Puedo usar mis propios gráficos (sprites)?
¡Por supuesto! Puedes importar tus propias imágenes en formato PNG a la carpeta de Sprites y asignarlas a tus objetos. Esto le dará a tu juego un estilo único.
Mi nave se mueve muy rápido/lento, ¿cómo lo ajusto?
En el evento Step del `obj_player`, puedes cambiar los valores numéricos. Por ejemplo, en `motion_add(image_angle, 0.1)`, un número mayor a 0.1 hará que acelere más rápido. En `image_angle += 4`, un número mayor hará que gire más rápido.
¿Qué es GML Code y GML Visual?
GameMaker permite programar de dos formas. GML Visual es un sistema de arrastrar y soltar bloques, ideal para empezar sin escribir código. GML Code es el lenguaje de scripting propio de GameMaker, potente y flexible, como el que hemos usado en esta guía. Si empezaste con Visual, un gran siguiente paso es intentar rehacer este proyecto con GML Code para entender mejor la lógica subyacente.
¿Cómo puedo compartir mi juego?
GameMaker te permite exportar tu juego para diferentes plataformas, como Windows, macOS, o incluso web (HTML5). Explora el menú "Build" para crear un ejecutable de tu juego y compartirlo con tus amigos.

Esperamos que esta guía te haya sido de gran ayuda. ¡Sigue experimentando, sigue aprendiendo y, sobre todo, sigue creando! ¡Feliz desarrollo!

Si quieres conocer otros artículos parecidos a Crea tu Propio Asteroids con GameMaker puedes visitar la categoría Juegos.

Subir