Introducción al Desarrollo de Videojuegos con GameMaker · Módulo 1: Introducción a GameMaker, instalación y primer proyecto.
Visión general de GML Code y GML Visual
Clase 5 de 60 · 60 min
También disponible en: EN
Dos caminos hacia un mismo objetivo: La lógica en GameMaker
Al crear un videojuego, el motor gráfico se encarga de renderizar imágenes en la pantalla, gestionar el audio y procesar las entradas del teclado o mando. Sin embargo, el motor no sabe por sí mismo qué reglas rigen tu mundo: ignora si un personaje debe perder vida al tocar un pincho, si una moneda debe sumar diez puntos al ser recogida o si una puerta debe abrirse cuando se presiona la tecla de acción. Para dar vida a estas reglas, el desarrollador debe programar la lógica del juego.
Históricamente, GameMaker ha destacado en la industria por democratizar el desarrollo de videojuegos mediante dos métodos de trabajo radicalmente distintos en su interfaz, pero equivalentes en su propósito: GML Visual (conocido en versiones anteriores del software como Drag and Drop o DnD) y GML Code (el lenguaje textual nativo del motor). Ambos conviven dentro del mismo entorno y están diseñados para comunicarse sin fricciones, pero cada uno impone una forma diferente de pensar, organizar y ejecutar el diseño de software.
El objetivo de esta lección es desmitificar ambos paradigmas, comprender cómo traduce el motor las instrucciones visuales a código de máquina, comparar su rendimiento y ergonomía diaria, y justificar formalmente por qué adoptaremos GML Code como el lenguaje vertebral a lo largo de nuestro proyecto de plataformas retro.
¿Qué es GameMaker Language (GML)?
GameMaker Language (GML) es el lenguaje de programación propietario creado específicamente para el ecosistema de GameMaker. A diferencia de lenguajes de propósito general como C++, Python o C#, GML está diseñado desde sus cimientos para resolver problemas comunes en videojuegos bidimensionales: cuenta con variables incorporadas para la posición espacial de los objetos (como 'x' e 'y'), variables de gestión de sprites e imágenes (como 'sprite_index' e 'image_speed'), y funciones nativas inmediatas para detectar colisiones geométricas complejas con una sola línea de instrucción.
Es fundamental comprender que GML Visual no es un motor alternativo ni un lenguaje aislado. GML Visual es una capa de abstracción gráfica que reposa exactamente sobre GML Code. Cada bloque que arrastras a la pantalla, cada campo de texto que completas en un nodo visual y cada conexión de flujo que realizas representa internamente una o varias líneas de GML Code. Cuando pulsas el botón de compilar o ejecutar (F5), GameMaker traduce los bloques visuales a código textual estándar antes de empaquetar el juego. Por lo tanto, el ordenador siempre termina leyendo las mismas instrucciones fundamentales, sin importar qué interfaz hayas utilizado tú para construirlas.
GML Visual: Programación basada en bloques de acción
GML Visual es un sistema de programación visual basado en nodos y bloques de acción modulares. En lugar de escribir sentencias sintácticas en un editor de texto en blanco, el usuario selecciona acciones prefabricadas desde una barra de herramientas lateral (la caja de herramientas de acciones) y las arrastra hacia el lienzo de eventos del objeto.
Cada bloque de acción representa una operación lógica reconocible mediante un icono descriptivo y un título en lenguaje natural. Por ejemplo, existen bloques dedicados para 'Assign Variable' (Asignar variable), 'If Variable' (Comprobar el valor de una variable), 'Set Direction and Speed' (Establecer dirección y velocidad) o 'Destroy Instance' (Destruir instancia). Al enlazar estos bloques verticalmente de arriba hacia abajo, se genera un diagrama de flujo que representa la ejecución secuencial de la computadora.

El flujo lógico en GML Visual se organiza mediante indentación y anidamiento visual. Si insertas un bloque condicional 'If', los bloques dependientes que deben ejecutarse únicamente cuando esa condición sea verdadera se sitúan ligeramente desplazados hacia la derecha, bajo la pestaña del bloque padre. De este modo, el usuario puede seguir visualmente la ruta que tomará el procesador cuando una entidad colisione, cuando un contador llegue a cero o cuando el usuario presione una tecla.
Ventajas destacadas de GML Visual
1. Eliminación de errores de sintaxis mecánica: Para los principiantes absolutos, uno de los mayores obstáculos al aprender a programar es la frustración que provocan los fallos de puntuación: olvidar un punto y coma (;), no cerrar una llave de apertura ({), confundir mayúsculas con minúsculas o escribir incorrectamente el nombre reservado de una función. En GML Visual, estos errores resultan casi imposibles, ya que los bloques imponen campos validados y estructuras rígidas que no permiten deformaciones tipográficas.
2. Descubrimiento guiado de funciones: La caja de herramientas categoriza las operaciones en secciones temáticas (Movimiento, Instancias, Audio, Gráficos, Lógica de control). Esto permite a quien se inicia explorar qué capacidades ofrece el motor simplemente hojeando las paletas de herramientas, sin necesidad de memorizar de antemano el diccionario de funciones del manual técnico.
3. Representación visual de ramas lógicas: Comprender los conceptos de bifurcación condicional ('si ocurre A, haz B; si no, haz C') resulta muy accesible cuando está graficado mediante ramas de colores y bloques encadenados, lo que facilita una comprensión espacial de la lógica a personas provenientes del diseño gráfico, el arte o la animación.
Limitaciones y fricciones de GML Visual
A pesar de sus bondades pedagógicas, el uso intensivo de GML Visual encuentra barreras notables a medida que los proyectos crecen en escala y ambición:
En primer lugar, la velocidad de desarrollo (o 'ergonomía') se reduce drásticamente. Escribir una fórmula matemática para calcular la trayectoria parabólica de un salto toma pocos segundos en el teclado. En GML Visual, esa misma fórmula exige arrastrar múltiples bloques de asignación, enlazar variables auxiliares y hacer clic repetidamente en menús desplegables. Lo que en texto ocupa una línea legible, en bloques visuales puede requerir una pantalla completa de diagramas.
En segundo lugar, la gestión del espacio en pantalla se vuelve caótica. Un objeto con una máquina de estados compleja (caminar, correr, saltar, deslizarse, atacar, recibir daño) produce lienzos gigantescos repletos de cadenas de bloques que obligan a realizar constantes desplazamientos horizontales y verticales (panning y zoom), dificultando mantener una visión global de la arquitectura del software.
Por último, la colaboración en equipo y el control de versiones (sistemas como Git o GitHub) sufren considerablemente. El código textual se compara línea por línea de manera limpia durante una fusión (merge). Los archivos generados por lenguajes visuales son estructuras XML o JSON densas: si dos desarrolladores modifican el mismo objeto en GML Visual simultáneamente, resolver los conflictos de fusión manualmente resulta sumamente complejo y propenso a corromper el recurso.
GML Code: La potencia del código textual
GML Code es la forma pura y directa de comunicarse con GameMaker. Se trata de un lenguaje imperativo, estructurado y de tipado dinámico, fuertemente influenciado en su sintaxis por lenguajes de la familia C, C++ y JavaScript. En GML Code, el desarrollador escribe instrucciones precisas mediante sentencias compuestas por funciones, operadores aritméticos, palabras clave reservadas y variables personalizadas.
El flujo de ejecución en GML Code avanza de forma estricta de arriba hacia abajo, línea por línea, dentro de cada evento. Los bloques de lógica condicional o iterativa se delimitan mediante llaves tipográficas '{' y '}', mientras que las instrucciones individuales se concluyen convencionalmente con un punto y coma ';'. GameMaker incorpora un editor de código avanzado con coloreado de sintaxis inteligente, detección de errores en tiempo real, autocompletado predictivo (IntelliSense) y documentación contextual integrada con tan solo presionar el botón central del ratón sobre cualquier función nativa.
Ventajas determinantes de GML Code
1. Máxima velocidad de iteración y agilidad: Un programador con conocimientos básicos escribe sentencias a la velocidad de su mecanografía. Tareas habituales como duplicar una condición, ajustar tres variables numéricas o reorganizar el orden de ejecución se realizan en milisegundos mediante atajos de teclado estándar (como Ctrl+C, Ctrl+V, o mover líneas con Alt+Flechas).
2. Densidad de información y legibilidad: En una sola pantalla de un monitor convencional caben fácilmente entre 50 y 80 líneas de código textual estructurado. Esto permite visualizar el estado completo de un personaje o el bucle principal de un enemigo de un solo vistazo, sin necesidad de navegar a través de múltiples ventanas modales o cadenas de nodos gráficos.
3. Integración con la comunidad y resolución de dudas: Prácticamente el 95% de la documentación comunitaria, tutoriales avanzados, repositorios de código abierto, foros oficiales de GameMaker y discusiones técnicas se comunican exclusivamente en GML Code. Compartir una duda en una comunidad en línea requiere simplemente copiar y pegar un bloque de texto formateado; compartir un problema en GML Visual exige tomar múltiples capturas de pantalla de la interfaz, lo cual entorpece la ayuda mutua.
4. Control de versiones profesional: Los scripts y eventos en GML Code se almacenan como archivos de texto plano (.gml). Los sistemas de control de versiones identifican cambios específicos con absoluta claridad (por ejemplo: 'se modificó la línea 24 cambiando la velocidad de 4 a 6'), facilitando el trabajo colectivo, las copias de seguridad remotas y el seguimiento del historial de desarrollo del proyecto.
Tabla comparativa: GML Visual frente a GML Code
Para consolidar una perspectiva clara sobre ambos métodos de trabajo antes de profundizar en la escritura práctica, la siguiente matriz analiza los aspectos operativos y técnicos más determinantes en el desarrollo diario:
| Criterio evaluado | GML Visual (Bloques de Acción) | GML Code (Texto Puro) |
|---|---|---|
| Curva de aprendizaje inicial | Muy suave; ideal para personas sin nociones previas de lógica de programación. | Moderada; requiere memorizar sintaxis básica, signos de puntuación y nombres de funciones. |
| Velocidad de escritura y edición | Baja; depende del uso constante del ratón, menús emergentes y navegación de lienzos. | Muy alta; aprovecha atajos de teclado, autocompletado y edición masiva de texto. |
| Densidad en pantalla | Baja; los bloques y conexiones ocupan amplias áreas de visualización. | Alta; decenas de instrucciones complejas caben en una sola vista del editor. |
| Prevención de errores | Impide errores tipográficos o de sintaxis formal al seleccionar opciones preestablecidas. | Requiere atención a la puntuación (puntos y coma, llaves y nombres de variables). |
| Soporte de la comunidad | Limitado; pocos desarrolladores experimentados comparten soluciones en formato visual. | Universal; la inmensa mayoría de guías, librerías y respuestas técnicas están en GML Code. |
| Control de versiones (Git) | Complejo de auditar y resolver ante conflictos de fusión concurrentes. | Excelente; texto plano estructurado que registra adiciones y borrados con total nitidez. |
| Rendimiento del juego final | Idéntico; el compilador convierte los bloques a la misma representación lógica de GML Code. | Idéntico; ambos caminos generan exactamente el mismo bytecode o código C++ optimizado (YYC). |
Caso práctico comparado: Movimiento horizontal y respuesta a entradas
Para comprobar de manera tangible cómo dialogan ambos paradigmas, analizaremos un comportamiento esencial de nuestro proyecto: hacer que el personaje principal reconozca si el jugador mantiene pulsada la tecla de dirección derecha (flecha derecha o letra D) y modifique su coordenada horizontal en pantalla.
Veamos ahora cómo se expresa con total precisión técnica esa misma instrucción exacta mediante GML Code en el editor de texto del mismo evento:
// Evento Step de obj_player
// Comprobar si la tecla flecha derecha está siendo presionada en este fotograma
if (keyboard_check(vk_right))
{
// Incrementar la coordenada horizontal en 4 píxeles
x = x + 4;
}Analicemos la anatomía del código escrito arriba. La palabra clave 'if' introduce una decisión lógica. La expresión entre paréntesis '(keyboard_check(vk_right))' evalúa una función nativa de GameMaker que devuelve 'true' (verdadero) mientras la tecla indicada permanezca presionada, y 'false' (falso) en caso contrario. El bloque delimitado por las llaves '{' y '}' contiene el cuerpo de la acción: 'x = x + 4;' toma el valor actual del objeto en el eje horizontal y le suma 4 unidades. También podríamos abreviarlo usando el operador de asignación compuesto 'x += 4;'.
Comparando ambos procedimientos, se evidencia una diferencia fundamental de abstracción: mientras que en GML Visual dependemos de entender qué significa marcar una casilla como 'Relative', en GML Code la relación matemática es transparente y explícita: 'x es igual a lo que valía x más 4'. Esta claridad matemática directa previene confusiones habituales y consolida un entendimiento real del espacio cartesiano sobre el que opera el videojuego.
La herramienta puente: Vista previa y conversión en vivo
Una de las características más formativas que ofrece GameMaker para quienes dan sus primeros pasos consiste en su capacidad de transformar la programación visual en código textual en tiempo real. Esta herramienta actúa como un puente pedagógico invaluable para derribar el miedo a la sintaxis escrita.
Si un desarrollador crea una serie de acciones utilizando GML Visual, puede hacer clic derecho en cualquier parte del espacio de trabajo visual del evento y seleccionar la opción 'Live Preview' (Vista previa en vivo). GameMaker abrirá una ventana lateral de sólo lectura en la que mostrará, en tiempo real, el código GML Code exacto generado por los bloques que se encuentran en el lienzo. Al alterar parámetros en los bloques visuales, las líneas de código de la ventana adyacente se recalculan instantáneamente.
💡 Consejo técnico: Puedes convertir de forma definitiva cualquier evento creado en GML Visual a GML Code haciendo clic derecho sobre el lienzo del evento y seleccionando 'Convert to GML Visual / Code'. No obstante, ten en cuenta que este paso suele ser unidireccional: el motor traduce los bloques a texto estructurado impecable, pero el código escrito manualmente con estructuras avanzadas no siempre puede reconstruirse de vuelta a bloques visuales.
Por qué elegimos GML Code para este curso
En este programa de formación hemos tomado la decisión deliberada de utilizar GML Code como el lenguaje vertebral a partir del Módulo 2 y durante todo el desarrollo de nuestro videojuego de plataformas. Aunque GML Visual es una opción válida para prototipar mecánicas elementales en pocas horas, los fundamentos de este curso buscan dotarte de competencias sólidas, profesionales y transferibles a la industria.
Las razones principales que sustentan esta elección metodológica son:
1. Escalabilidad del proyecto retro: Construir un juego completo con movimiento de subpíxel, saltos con inercia variable, colisiones sólidas bidireccionales, enemigos con inteligencia artificial básica, interfaz de usuario (HUD) y persistencia de datos requiere una arquitectura lógica organizada. Administrar todo este ecosistema mediante bloques visuales provocaría una sobrecarga cognitiva severa debido a la dispersión visual de las acciones.
2. Transferibilidad del pensamiento computacional: Aprender la sintaxis estructurada de GML Code te entrena directamente en conceptos universales como tipos de datos, variables locales y de instancia, matrices, bucles 'for', condicionales 'switch' y modularización mediante funciones y métodos. Estas estructuras mentales son directamente aplicables si en el futuro decides programar en C#, GDScript, JavaScript o C++.
3. Independencia y resolución autónoma de problemas: Conocer GML Code te otorgará la libertad de consultar la vasta biblioteca de recursos comunitarios de GameMaker existente en internet, entender tutoriales técnicos en cualquier idioma, integrar código compartido por otros desarrolladores indie y reportar o depurar tus propios errores leyendo directamente la consola de compilación del sistema.
Actividades y ejercicios prácticos
Para asentar los conceptos explicados sobre las diferencias lógicas y la traducción entre sistemas, completa las siguientes tres actividades prácticas:
Resumen
- GML (GameMaker Language) es el núcleo lógico del motor; tanto GML Visual como GML Code se traducen a las mismas instrucciones operativas al compilarse.
- GML Visual estructura la lógica mediante bloques de acción gráficos interconectados, facilitando el inicio a perfiles no técnicos y evitando fallos mecánicos de sintaxis.
- GML Code representa el desarrollo textual puro con sintaxis estilo C; proporciona la máxima velocidad de escritura, excelente legibilidad global y facilidad indispensable para el trabajo en equipo con Git.
- GameMaker incluye la función 'Live Preview' para visualizar en tiempo real el código textual equivalente a los bloques de acción, sirviendo como un excelente puente formativo.
- A partir del siguiente módulo, este curso adoptará GML Code como estándar técnico para construir de manera escalable, limpia y profesional nuestro videojuego de plataformas 2D.
Practica lo aprendido
Ejercicio 1 · 1 punto
Al pulsar compilar o ejecutar (F5) en GameMaker, el motor ejecuta directamente los bloques de GML Visual mediante un intérprete gráfico aislado, sin convertirlos a GML Code.
Ejercicio 2 · 1 punto
Relaciona cada concepto o paradigma de GameMaker con su característica o limitación correspondiente según el texto:
- GML Visual
- GML Code
- Control de versiones (Git)
- Tecla F5
Ejercicio 3 · 1 punto
En GML Code, los bloques de lógica condicional o iterativa se delimitan mediante , mientras que las instrucciones individuales se concluyen convencionalmente con un .
Ingresa para guardar tu progreso — Ingresar