Plataformas para Desarrollar Videojuegos
Plataformas para Desarrollar Videojuegos
NOMBRE DE LA ESCUELA
ELABORACIÓN
VALIDACIÓN
EQUIPO DE DESARROLLO
Didactic
AÑO
2022
2
Tabla de contenidos
Introducción ................................................................................................................................ 5
Variables.................................................................................................................................... 26
Métodos .................................................................................................................................... 30
Herencia .................................................................................................................................... 31
Cierre ......................................................................................................................................... 42
3
Aprendizaje esperado
4
Introducción
En este documento revisaremos los motores de videojuegos, lo que nos permitirá generar un
producto conforme a lo que requieran los usuarios, a sus necesidades de uso. Por ejemplo,
existen usuarios de videojuegos que utilizan tecnologías móviles, computador de escritorio y
navegadores web.
El término “motor de videojuego” hace referencia a librerías de programación que nos ayudan
a diseñar, crear y representar un videojuego. Dentro de los aspectos más relevantes para la
elección de un motor de videojuegos, se encuentran las capacidades gráficas que ofrece el
producto, dado que son las encargadas de “dibujar” o renderizar las imágenes 2D y 3D en la
pantalla, así como también realizar el cálculo de algunos aspectos gráficos como los polígonos,
iluminación y texturas, entre otras.
El motor de física: permite aplicar una lógica de movimiento físico a los elementos e imágenes
de videojuegos para que tengan una sensación más realista en la interacción de los objetos
con el entorno.
El motor de sonido: los elementos de sonidos y la banda sonora de un videojuego son los
encargados de cargar pistas de audio, modificar su tasa de bits, quitarlas de reproducción, y
sincronizarlas, entre otras cosas.
5
1. Motores de videojuegos
En los lenguajes de programación es posible crear videojuegos, aplicando técnicas por medio
del propio lenguaje y algoritmos. Se puede mostrar y sobreponer imágenes e incluso editar las
mismas por medio de un programa. En fin, programar todos los componentes que permiten
dar movimiento a las imágenes, y poder controlarlas por medio del lenguaje de programación.
Sin embargo, esta tarea podría ser muy laboriosa, dada la gran cantidad de código fuente que
se debe programar. Son demasiadas rutinas, para poder abrir, cerrar y mover imágenes.
Además, poder capturar las teclas que presiona el usuario, para poder dar una ubicación a las
imágenes.
En los programas que has desarrollado en cursos anteriores, te habrás dado cuenta de que
muchas de las rutinas que programaste, te podrían servir para futuros proyectos,
parametrizándolos y permitiendo así entregar un resultado al software que lo solicite. Lo
anterior, es lo que en programación denominamos Librería de métodos, procedimientos, y
clases.
Es por ello, que un motor de videojuegos es un conjunto de librerías (que alguien programó),
para que no tengas que programar ciertas funciones que permiten crear, diseñar y mostrar los
elementos de un videojuego. Por ejemplo, mostrar una secuencia de imágenes, en la pantalla,
y permitir que estas imágenes se puedan desplazar por ella, indicando el punto de la pantalla
(pixel), en donde se debe mostrar. Dicha imagen, puede ser mostrada en distintos puntos
seguidos, dando la impresión de movimiento. Posteriormente, si la imagen va descendiendo
por la pantalla, es posible que esté cayendo.
Es una excelente pregunta, ya que, si realizamos una iteración por medio de un ciclo, (FOR,
WHILE), dependiendo de la velocidad de CPU que tenga tu computador, la imagen recorrerá
6
la pantalla a distintas velocidades (si hiciéramos un benchmark entre ellos). Las velocidades de
las CPU actuales son medidas en GigaHertz (GHz), por ejemplo, una CPU de 2,4 GHz, es capaz
de ejecutar 2400 millones de ciclos por segundo, y 3,2GHz por lo que recorrer una pantalla de
1024x768 en un ciclo, en una CPU de 3,2GHz tardaría menos en finalizar, que en una de 2,4GHz.
Si realizaras el cálculo, y considerando que el ojo humano ve movimiento continuo después de
los 50Hz, apenas seríamos capaces de ver el movimiento de la imagen, entonces debemos
establecer una pausa entre cada ciclo, para que la imagen vaya más lento. Para dar más
realismo a la caída de la imagen, entonces deberíamos realizar el cálculo de la velocidad,
considerando la gravedad de la tierra (o del planeta del personaje). Si bien puede sonar algo
complicado, algunos motores de videojuegos cuentan con un motor de física que realiza estos
cálculos para que podamos aplicarlo en nuestro videojuego.
Ahora que conocemos que es posible mostrar una imagen en una pantalla, por medio de un
motor de videojuegos, debemos decidir si dichas imágenes las mostraremos para representar
una figura en dos o tres dimensiones, lo cual veremos a continuación.
Algunos de los criterios a utilizar, es que el software sea estable. Como bien sabemos todos, el
utilizar sistemas que llevan poco tiempo en el mercado, está propenso a errores, por lo cual el
utilizarlos, es un riesgo que se asume. Es mejor, utilizar software que ya ha pasado por
procesos de estabilización, para reducir los potenciales errores que podría traer. Además,
debemos considerar la fase de mantenimiento, y la periodicidad de lanzamientos de nuevos
“parches”, que son las actualizaciones del sistema, en cuanto a la solución de fallos o errores.
Otro de los aspectos relevantes a la hora de seleccionar un motor, es que la empresa aún
continúe con el proyecto. Es necesario indagar al respecto, revisando si tienen previsto
descontinuar próximamente el producto.
7
Y por último, el tema de costos es crucial al momento de elegir un motor. Algunos motores,
piden un porcentaje de las ventas al utilizar su motor, y otros exigen una licencia para poder
comercializar el producto. La sugerencia, es revisar el software libre disponible, que cumpla
con tus expectativas.
Ya habiendo conocido de qué se trata una imagen 2D/3D, para enlazar lo visto hasta el
momento, te presentamos algunos de los motores de videojuegos que existen en el mercado:
Decima Engine: es un motor de videojuegos, el cual además posee un motor de física. Permite
el desarrollo de videojuegos 2D y 3D.
El primer juego para el que se utilizó el motor fue el videojuego de nombre Killzone: Shadow
Fall. Posteriormente, durante el mes de junio de 2015, Guerrilla Games publicó que el
videojuego Horizon: Zero Dawn, estaba usando el motor para el desarrollo del mismo. Durante
el mismo año, en el mes de agosto, se publica que el videojuego Until Dawn, también utilizaría
el motor decima engine, junto con el motor de física Havok . Durante el mes de diciembre de
2015, Until Dawn: Rush of Blood también utilizó el motor, en conjunto a PlayStation VR. Hideo
Kojima (director y productor de videojuegos japonés), durante el año 2016, anunció la
preparación para el juego “indi” (Juegos independientes), llamado Death Stranding de Kojima
8
Productions , el productor anuncia que se había asociado con Guerrilla Games, utilizando el
motor para el desarrollo.
Una de las principales características del motor, es que utiliza Inteligencia artificial para una
resolución de 4K.
El Frostbite 3 fue el motor de Digital Illusions CE para ser desarrollado en las consolas de
generación PlayStation 4 y Xbox One. Sin embargo, según las empresas EA (Electronics Arts) y
DICE (Digital Illusion CS), no era compatible con las consolas Wii U. Actualmente, sigue siendo
utilizado para la nueva generación de consolas PlayStation 5, Xbox Series X y Series S y
Nintendo Switch.
Dentro de las cualidades del videojuego “BattleField 4”, se aprovechó el 80% de la capacidad
del motor gráfico. Para el videojuego Battlefield 3, solamente se usaba un 30% de la capacidad
del motor.
Otra de las características que se explota del motor, son los efectos climáticos con dinámica
en tiempo real como por ejemplo lluvia, nieve, tormentas de arena, niebla, entre otros.
9
polígono o grupo de polígonos idénticos que convenientemente agrupados recubren
enteramente el plano.
El desarrollo del motor Luminous fue similar a los conceptos utilizados en el motor Unreal
Engine de Epic Games, y también en el motor Unity de Unity Technologies, en el cual
incorporan todas las herramientas de desarrollo necesarias, abordando la fase de edición de
los recursos, simplicidad en el uso, alta velocidad en el proceso de compilación, una
herramienta compacta, y con soporte de metodología de desarrollo de videojuegos. Para este
concepto y enfoque, el equipo de desarrollo se inspiró en Unreal Engine de Epic Games y
CryEngine de Crytek. El nombre "Luminous" fue elegido para representar el tema del cristal
que está presente a lo largo de la serie Final Fantasy.
PyGame: Es un motor de videojuegos para ser utilizado con Python, orientado al manejo de
sprites.
10
Imagen 4: Logo PyGame
Fuente: PyGame.org
Pygame es un módulo para Python, el cual viene instalado por defecto en la versión de
Raspbian para Raspberry Pi. De todas maneras, es posible instalar este módulo en cualquier
otro sistema operativo, dada su característica de multiplataforma. Mediante esta librería,
permite la creación de videojuegos en dos dimensiones de una manera fácil y sencilla. Además,
este módulo o librería permite la utilización de sprites (objetos), y permite cargar y mostrar
imágenes en diferentes formatos, efectos de sonidos, etc. La programación de captura de
eventos de teclado, mouse o joystick, es muy sencillo de utilizar.
Una de las principales ventajas de Unity es la versatilidad, en el sentido que permite combinar
entornos en diferentes dimensiones, lo que posibilita el desarrollo de todo tipo de juegos,
como lo son las aventuras gráficas, juegos de rol o shooters en primera y tercera persona.
Comparado con otros motores similares, como Unreal Engine 4, CryENGINE V o Game Make,
en los últimos la integración de escenarios y proyectos en dos dimensiones son más complejos,
ya que los competidores están diseñados específicamente para juegos 3D. Unity permite
combinar proyectos tanto en 2D como en 3D, y es por ello que los desarrolladores utilizan este
motor. Además, por medio del motor Unity, permite realizar complicación de proyectos en
11
más de 25 plataformas, como por ejemplo dispositivos móviles, equipos de escritorio, consolas
de videojuegos, aplicaciones para televisión, web y VR (Virtual Reality). Es por ello que
fabricantes como Apple, Google, Sony, Gear VR, Microsoft y Nintendo lo eligen para muchos
de sus productos y juegos.
Unreal Engine: Motor de videojuegos creado por la empresa Epic Games, programado en C++.
Actualmente, está disponible la versión 5, siendo compatible con las consolas PS5 de Sony y
Xbox X/S de Microsoft. Algunas de las empresas que utilizan este motor, son Electronic Arts y
Ubisoft.
Unreal Engine es uno de los motores de videojuegos muy utilizado por los usuarios y por las
compañías. Su funcionamiento se basa en código C++. Este motor de videojuegos, ofrece las
herramientas necesarias para el desarrollo tanto como de videojuegos, como de simulación.
Además, este motor es posible utilizar como herramienta de editor de vídeo, estudio de
sonido, código o renderización de animaciones, entre otras formas de trabajo más que se
pueden desarrollar con este software.
Dentro de los usos que se ha dado a este motor, están las áreas de arquitectura, como para
realizar visitas virtuales en construcciones piloto, ingeniería para la simulación de
movimientos, medicina, realidad virtual, desarrolladores de aplicaciones, etc. Incluso, NASA
utiliza este motor para el entrenamiento de astronautas.
12
final. Además, debemos considerar la cantidad de herramientas disponibles para su uso, como
por ejemplo que permita realizar integración de tecnologías, como por ejemplo editores de
video y audio.
2. Desarrollo de videojuegos 2D y 3D
Los gráficos en dos dimensiones (2D), utilizan los ejes X e Y como un plano cartesiano,
lo cual, en una imagen, se representa como largo y ancho.
Un gráfico en tres dimensiones (3D) es una imagen 2D, que permite por medio de
perspectivas, poder visualizar dicha imagen con un volumen, al utilizar los ejes X,Y y Z.
13
Imagen 8: Emoji 3D de Microsoft Word
Por medio de las imágenes 3D nos permite nuestra visión permite realizar una
estimación del tamaño de un objeto y la distancia de otro. Si la otra imagen es más
pequeña, entonces nos dará la sensación de profundidad, dada nuestra la capacidad de
percibir la perspectiva.
14
Fuente: Microsoft Office
15
Fuente: Microsoft Office
Entre las dos figuras anteriores, se puede apreciar claramente la diferencia entre una
obra en 2D y 3D ¿Cuál de las dos es más complicada?
16
La respuesta a la pregunta anterior, la has podido deducir tú mismo. La misma regla
aplica para el desarrollo de videojuegos 2D y 3D. Al momento de generar un videojuego
en tres dimensiones, requiere mucho más trabajo, ya que son más variables que
debemos utilizar. Los algoritmos de programación, a su vez, son más complejos de
implementar, e incluso el tratamiento de imágenes para dar un efecto en tres
dimensiones, es más laborioso.
Ámbito a considerar 2D 3D
17
Movimientos del jugador Plano Mundo
(*) Existen videojuegos 2D en alta definición, sin embargo, la calidad de 3D sigue siendo
superior.
18
3. Lenguajes de programación
Existen diversos lenguajes de programación, unos más antiguos que otros, sin embargo,
en todos ellos es posible programar un videojuego. Por ejemplo, en un lenguaje que no
está orientado a lo visual, es posible crear un videojuego por medio de trivias,
seleccionando una tecla como alternativa (un cuestionario).
19
Lenguaje Basic: es un lenguaje de programación de medio nivel, siendo
introducida en computadores del hogar como el Atari 800XL, a principios de
1980.
• Java: lenguaje desarrollado por Sun Microsystem que utiliza una máquina virtual
(JRE) para ser ejecutada.
• PHP: lenguaje de programación interpretado que es utilizado mayormente en
ambiente web.
• Python: lenguaje interpretado de código abierto, utilizado principalmente para
ciencia de datos, que sin embargo se utiliza para una variedad de aplicaciones
(incluyendo videojuegos).
• JavaScript: lenguaje de programación principalmente desarrollado para la
ejecución de rutinas en los navegadores del cliente. Sin embargo, dado su
potencial, es posible convertirlo en un servidor, como nodeJS.
• C#: es un lenguaje de programación multiparadigma, estandarizado por
Microsoft, cuya sintaxis deriva de los lenguajes C/C++.
20
3.1. Lenguajes de programación para el desarrollo de
juegos en páginas web
Uno de los principales conceptos de la web son los documentos HTML, los que permiten
aplicar etiquetas a los textos y objetos para que un navegador los pueda renderizar y el
usuario visualice dichos textos/objetos. Se trata de elementos como: negrita, cursiva y
subrayados, por ejemplo, por medio de los códigos <b>Negrita</b>, <i>Cursiva</i> y
<u>Subrayados</u>, respectivamente (etiquetas no orientadas a la web semántica).
También existen códigos para agregar imágenes a la web, como por ejemplo el archivo
html, que contiene la etiqueta <img src=”laimagen.jpg” />, que mostrará una imagen
en la pantalla (el archivo laimagen.jpg debe estar en el mismo directorio que el
documento html).
21
<!DOCTYPE html>
<html lang="es">
<head><title>Ejemplo</title></head>
<body>
<canvas id="micanvas" width="250" height="250">
<img id="laimagen" alt="" />
</canvas>
<script>
window.onload = function(){
var imagen = new Image();
imagen.src = "./laimagen.jpg";
// Esperará a que la imagen se cargue.
imagen.onload = function () {
//Agrega la imagen cargada al canvas.
var elcanvas = document.getElementById("micanvas");
var ctx = elcanvas.getContext("2d");
ctx.drawImage(imagen,0,0);
}
}
</script>
</body>
</html>
2. Abre el editor de imágenes ms Paint, y crea una imagen con las herramientas del
programa, como demuestra la siguiente imagen (procura que las dimensiones
sean de 150x150 en las propiedades del archivo):
22
Imagen 1: Imagen creada con MSPAINT
23
Imagen 2: Creación de un archivo HTML
NOTA: Procura seleccionar el tipo desde *.txt a “Todos los Archivos (*.*)”, como indica
la imagen anterior.
24
Imagen 3: Resultado del código HTML con Javascript
for(i=0;i<150;i++){
ctx.moveTo(0, 0);
ctx.lineTo(150, i);
ctx.stroke();
}
25
Con lo anteriormente visto, ya puedes crear una secuencia de imágenes dentro de la
etiqueta canvas, con un algoritmo que tú puedes crear, dependiendo de las
necesidades.
3.2. Variables
Las variables dentro de los lenguajes de programación son elementos que permiten
almacenar datos, para posteriormente utilizarlos durante el programa que estemos
creando.
Para los tipos estáticos, la declaración de variables debe especificar el tipo de dato que
se almacenará, para mantener la integridad del dato, al reservar la cantidad específica
de espacio en la memoria RAM. Los tipos dinámicos se caracterizan por no asignar un
tipo de dato específico a las variables, de manera que se asignará una cantidad de
memoria RAM de manera dinámica.
• C#
• Java
• C++
• GO
• Rust
26
• Python
• Pascal
• Lisp
• Perl
• PHP
• Prolog
• Basic
• JavaScript
Para el caso de JavaScript, se puede almacenar los datos sin necesidad de especificar
su tipo (tipado dinámico), como por ejemplo:
i=0
z=”2123”
y=0.123
Sin embargo, para otros lenguajes como C#, es necesario especificar su tipo, como por
ejemplo:
string nombre = “Javier”;
int edad = 12;
float estatura = 1.60;
Tipos de Dato en C#
27
Un tipo de dato primitivo es aquel que viene inserto en el lenguaje (no se necesita
librerías adicionales para utilizarlo).
double 64 bits +-
float 32 bits +-
28
long 64 bits +-
Son aquellos que requiere de una clase, por lo tanto se crea un objeto del tipo… por
consiguiente, se puede utilizar los métodos que estén disponibles en la clase. Ej:
.toString(), y comienzan con una mayúscula, dentro del espacio de nombres System.
29
3.3. Métodos
Los métodos son “funciones o rutinas” que contienen las clases. Son un conjunto de
instrucciones agrupadas en bloque, las cuales contienen un nombre para ser llamados.
Por ejemplo: sumar, restar, dividir y multiplicar.
Y por último, se debe especificar el tipo de retorno que tendrá cada método (anets del
nombre del método). Si no devuelve un resultado, entonces será void, quedando de la
siguiente manera:
30
3.4. Herencia
Cuando hablamos de herencia, es muy similar a lo que ocurre con los genes. Los hijos
heredan características de los padres, por medio de dichos genes. En lenguaje de
programación, las clases que son la abstracción de los objetos, permite ir heredando
entre clases, las características.
Para definir una clase, debemos fijarnos en las características que tienen los objetos, y
no en su valor. La definición de una clase, se realiza por medio de la palabra reservada
class, seguido del nombre de la clase, de manera que sea descriptivo. Ejemplo de clase:
class Vehiculo{
//ACÁ VAN LOS ATRIBUTOS (VARIABLES) Y MÉTODOS (FUNCIONES)
}
Posteriormente, debemos fijarnos en las características que tienen todos los vehículos,
por ejemplo, la distancia recorrida, la velocidad y la ubicación. Un ejemplo de atributos
de la clase, sería:
class Vehiculo{
31
Para acceder a dichos atributos, se puede definir métodos de acceso, llamados GETTERS
para obtener un valor, y SETTERS, para asignar un valor. No son más que métodos que
retornan o asignan sus valores. Ejemplo para el atributo velocidad, sería:
class Vehiculo{
return velocidad;
this.velocidad = vel;
En C#, para crear nuevas clases que hereden de esta, se realiza por medio del caracter
“:”, quedando de la siguiente manera:
int ruedas = 4;
32
Class Avion : Vehiculo {
int motores = 2;
33
3.5. Programación Orientada a Objetos (POO)
Por ejemplo:
34
Imagen 4: representación de objetos en memoria RAM
35
4. Requerimientos computacionales para
videojuegos
Para crear un videojuego, es necesario contar con un computador con sistema
operativo. Dependiendo del motor que se vaya a utilizar, cada uno de ellos requiere de
un mínimo. Sin embargo, es necesario considerar muchos elementos más, como por
ejemplo la calidad de las imágenes a renderizar. No es lo mismo renderizar una imagen
2D que una en 3D, y también debemos considerar la lógica del juego, tanto como las
reglas del juego, y las etapas de la misma. Recordemos que el desarrollo de videojuegos
es un ciclo eterno que realizará las acciones de movimiento. Si utilizaremos imágenes
en alta resolución, entonces deberíamos considerar una tarjeta gráfica que apoye en la
renderización de dichas imágenes.
El mismo proveedor de motor especifica también los requerimientos con los que deben
cumplir los jugadores para ejecutar los videojuegos, para dispositivos móviles, es una
versión Android superior a 4.4, con un procesador ARM 32, o 64, los cuales son
unidades centrales de procesamiento (CPU) de bajo consumo. Además, se requiere de
1G o más en la memoria RAM (Random Access Memory)
36
4.1. Redes de computadores, topologías, enrutadores,
puertos
De acuerdo con el modelo OSI, el cual es un modelo de referencia para los protocolos
de red, divide la comunicación en capas, siendo:
Una topología es el mapa lógico o físico de una red, para intercambiar datos entre los
dispositivos. Existen diferentes topologías, dependiendo de cómo están
interconectados entre ellos.
37
Imagen 17: Topologías de red
De la imagen anterior, las redes que mayormente se utilizan dentro del hogar y las
empresas, es la topología estrella, en donde cada terminal se comunica con otros, por
medio de un único dispositivo, ya sea un concentrador (o switch), o bien por medio de
un router. Normalmente, se utiliza cable UTP, para esta topología. Y, cuando es una
topología de anillo, entonces se utiliza Coaxial, normalmente.
38
Imagen 18: Dispositivo de comunicación
Capa 3: en esta capa, entran en juego los protocolos de enrutamiento, los cuales
permite conectar con otras redes (por ejemplo internet), entregando el mensaje
(llamado paquete), a un dispositivo llamado router, el cual entregará el mensaje a otro
dispositivo similar, el cual acercará el mensaje al destino. Dicho mensaje, pasará por
muchos de estos dispositivos, hasta llegar al dispositivo final. Es así como funciona
internet.
39
Capa 6: El objetivo, es presentar los datos, en donde establece el contenido de la
comunicación, por ejemplo la cantidad de bits transmitidos (ejemplo: bloques de 16,
32 o 64 bits etc.). De esa manera, ambos dispositivos serán capaces de representar los
datos transmitidos.
Capa 7: Define los protocolos que utilizan las aplicaciones para intercambiar los datos
(SMTP, FTP, HTTP, etc).
Contar con una dirección IP, el cual consta de 32 bits, y dividido en 4 octetos, nos dará
cuatro números entre 0 y 255, el cual identificará un equipo dentro de la red. Ejemplo:
192.168.1.22
40
Imagen 19: Ejemplo de netstat
41
Cierre
Podemos concluir que existen diversos lenguajes de programación y en todos ellos podemos
desarrollar un videojuego. Sin embargo, cada uno de ellos cuenta con diferentes
características, por lo cual, dependiendo de los requerimientos, seleccionaremos uno u otro.
Para facilitar el desarrollo podemos hacer uso de un motor de videojuegos, el cual posee
funciones que podemos reutilizar para cargar imágenes y renderizarlas, capturar los eventos
de teclado, etc.
42
Referencias bibliográficas
Villa, D., Pérez, S., & Moya, F. (2015). Desarrollo de Videojuegos. Un enfoque práctico.:
43