Patrones y Arquitecturas de Desarrollo de Juegos en JavaScript

Rate this content
Bookmark

En el ámbito del desarrollo de juegos, la arquitectura y los patrones de diseño adecuados pueden marcar la diferencia. Esta sesión profundiza en el mundo de los patrones y arquitecturas de desarrollo de juegos en JavaScript, ofreciendo una exploración exhaustiva de las técnicas y estrategias utilizadas para crear juegos atractivos y bien estructurados.

This talk has been presented at JS GameDev Summit 2023, check out the latest edition of this JavaScript Conference.

FAQ

El sistema de entidad-componente (ECS) es un patrón arquitectónico de software que representa los juegos como entidades y sus componentes como comportamientos en los datos. Las entidades son colecciones de componentes que, juntos, forman objetos en el juego, como un automóvil en un videojuego, que puede tener componentes como velocidad y posición.

Los patrones y arquitecturas en el desarrollo de juegos ayudan a crear código más modular, mantenible y extensible. Facilitan la gestión del juego al simplificar el proceso de desarrollo y prevenir errores comunes, lo que mejora el rendimiento y la interacción del usuario con el juego.

Un bucle de juego es una secuencia repetitiva de instrucciones que controla el flujo de un juego. Incluye pasos como recibir entradas del jugador, actualizar el estado del juego, renderizar cambios en la pantalla y esperar antes de comenzar el ciclo nuevamente. Este proceso es fundamental en casi todos los videojuegos.

Desacoplar la lógica del juego del renderizado mejora el rendimiento y la flexibilidad del juego. Permite que la lógica del juego y la representación visual operen de manera independiente, facilitando cambios en la apariencia del juego sin afectar su funcionamiento interno, lo que también simplifica la depuración y el mantenimiento del código.

El paso de tiempo fijo asegura una cantidad constante de tiempo para cada iteración del bucle de juego, lo que proporciona estabilidad y previsibilidad. El paso de tiempo variable, por otro lado, permite adaptar el tiempo de cada iteración a diferentes factores como entradas del jugador o eventos del juego, ofreciendo flexibilidad y una respuesta más dinámica.

ECS promueve la reutilización de código al permitir que los componentes se definan una vez y se reutilicen en múltiples entidades. Esto facilita la creación de nuevos objetos de juego al combinar componentes existentes de manera flexible, lo que también ayuda a mantener un acceso eficiente a los datos y a escalar el juego más fácilmente.

En ECS, los sistemas son colecciones de entidades y componentes que ejecutan tareas específicas. Al separar las funciones y operar sólo con los componentes necesarios para una tarea, los sistemas mejoran la eficiencia del juego al reducir la carga de trabajo y facilitar la gestión del código, lo que a su vez mejora el rendimiento general del juego.

Olayinka Atobiloye
Olayinka Atobiloye
28 min
28 Sep, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy aborda el diseño y la arquitectura de juegos, incluyendo los sistemas de componentes de entidades, los bucles de juego y la desvinculación de la lógica del juego del renderizado. Los sistemas de componentes de entidades son populares en el desarrollo de juegos en JavaScript para representar juegos como entidades y sus componentes como comportamiento sobre datos. Los bucles de juego controlan el flujo del juego y actualizan su estado, con diferentes arquitecturas como el paso de tiempo fijo y el paso de tiempo variable. La desvinculación de la lógica del juego del renderizado mejora el rendimiento y la flexibilidad, permitiendo actualizaciones independientes y la fácil adición de nuevas características. Tener una clara separación de responsabilidades en el desarrollo de juegos mejora el rendimiento, aumenta la flexibilidad y facilita la depuración.

1. Introducción al diseño y arquitectura de juegos

Short description:

¡Hola a todos! Hoy les voy a guiar a través del diseño y la arquitectura de juegos. Cubriremos patrones y arquitecturas comunes en el desarrollo de juegos, incluyendo sistemas de entidad-componente, bucles de juego y desacoplamiento de la lógica del juego del renderizado. Comencemos con el sistema de entidad-componente, que es un patrón popular en el desarrollo de juegos. Representa los juegos como entidades y sus componentes como comportamiento en los datos. En el desarrollo de juegos en JavaScript, los sistemas de entidad-componente son esenciales.

Hola a todos, muchas gracias por venir a mi charla hoy. Mi nombre es Olayinka Atobele y hoy les guiaré a través del diseño y la arquitectura de juegos. Antes de comenzar, me gustaría darles una breve introducción sobre quién soy. Soy estudiante de ingeniería informática en la Universidad de Lagos. También soy ingeniero de software, escritor técnico y experto en GitHub Campus. Me apasiona mucho la diversidad e inclusión en la tecnología. Básicamente, organizo eventos y programas dirigidos hacia eso. Hoy hablaremos sobre los patrones y arquitecturas de desarrollo de juegos en JavaScript. Básicamente, les presentaré algunos patrones y arquitecturas comunes que pueden ayudarnos a acelerar el desarrollo de juegos en JavaScript. Entonces, ¿qué son exactamente el desarrollo de juegos, los patrones y las arquitecturas? Son soluciones razonables que se pueden utilizar para resolver algunos problemas comunes que enfrentamos en el desarrollo de juegos. El desarrollo de juegos puede volverse fácilmente voluminoso, especialmente a medida que escalas tus juegos, a medida que tus juegos se vuelven más grandes y poderosos, puede volverse más difícil de mantener, más difícil de expandir o extender sus características. Básicamente, lo que hacen los buenos patrones y arquitecturas es ayudarte a hacer tu código más modular, más mantenible, más extensible y, a largo plazo, incluso puedes mejorar el rendimiento de tu juego, qué tan bien funciona, qué tan bien los usuarios pueden interactuar con tus juegos y qué tan escalable es, qué tan fácil es para ti agregar otras características o incluso incorporar nuevos recursos a tus juegos. Entonces, ¿por qué es importante? Como mencioné anteriormente, el desarrollo de juegos es una tarea compleja. Es desafiante. Puede volverse fácilmente complejo. Los patrones y arquitecturas, tener buenos patrones y arquitecturas en su lugar, te ayudará a simplificar el proceso de desarrollo de los juegos y también ayudará a que la gestión del juego sea más manejable. Además, incluso podría ayudarte a prevenir algunos errores comunes, ya sabes, tener algunos errores en tus juegos. Entonces, ¿qué vamos a cubrir en esta charla? Vamos a comenzar... vamos a cubrir algunos patrones comunes e importantes en el desarrollo de juegos. Hablaremos sobre los sistemas de entidad-componente, ECS, luego hablaremos sobre los bucles de juego y luego hablaremos sobre el desacoplamiento, ya sabes, la lógica del juego del renderizado. Entonces, ahora comencemos con el sistema de entidad-componente. Entonces, el sistema de entidad-componente, ECS, es básicamente un patrón popular para el desarrollo de juegos. El sistema de entidad-componente es un patrón arquitectónico de software que representa los juegos como entidades y sus componentes como comportamiento en los datos. Esto tiene palabras grandes, así que solo para simplificarlo, voy a usar una analogía. Así que supongamos que muchos de nosotros estamos familiarizados con los juegos de Lego, los bloques de Lego, así que supongamos que estás construyendo un automóvil con bloques de Lego, ¿verdad?, entonces probablemente tendrás las ruedas, el volante, el cuerpo, todas esas diferentes partes, todos esos diferentes componentes, serán tus componentes. Básicamente, solo representan, ya sabes, el comportamiento, solo representan, como, una parte en particular, como los datos de todo tu juego, ¿verdad?, así que todo tu juego y, básicamente, las entidades son solo una colección de los componentes. Entonces, cuando, digamos, terminas de ensamblar todos tus diferentes bloques de Lego y tienes un automóvil. Entonces, en esa situación, como tu automóvil, que es básicamente, como, una colección de los diferentes componentes, es básicamente, en este caso, tu entidad, porque es solo, como, estás ensamblando diferentes componentes juntos, ¿verdad? Entonces, tus diferentes componentes que, básicamente, representan un comportamiento, como un dato en particular de tus componentes, ¿verdad? Básicamente, solo representan, ya sabes, una sola, ya sabes, pieza, como un solo dato, un solo comportamiento, y luego tu entidad es básicamente, ya sabes, una colección de diferentes componentes que, ya sabes, tal vez representen, como, una entidad en particular, un objeto en tu juego. Así que ahora, volviendo al desarrollo de juegos en el mundo de JavaScript, supongamos que estás construyendo,

2. Explorando el Sistema de Entidad-Componente (ECS)

Short description:

En el desarrollo de juegos, las entidades representan objetos en el juego, mientras que los componentes son los datos adjuntos a las entidades. Los sistemas son colecciones de entidades y componentes que realizan tareas específicas. ECS promueve la reutilización de código, admite un acceso eficiente a los datos y permite una fácil escalabilidad. Las entidades se crean y destruyen en tiempo de ejecución, y los sistemas se actualizan regularmente. ECS es popular porque separa el comportamiento y los datos, lo que hace que el código sea más manejable. Ejemplo de código: componentes de posición y velocidad con un sistema de movimiento.

digamos, un juego de video, ¿verdad? En tu juego de video, tal vez tengas un automóvil que se está moviendo o algo así. En ese caso, digamos que tu automóvil va a tener, ya sabes, velocidad, ¿verdad?, vas a tener una velocidad, vas a tener una posición, como, donde se encuentra actualmente tu automóvil. Todas esas dos cosas son un poco tus componentes, ¿verdad?, tu velocidad y tu posición, son componentes. Pero el automóvil en sí, que va a ser, ya sabes, como, ya sabes, un cierto automóvil va a tener una velocidad, va a tener una posición, va a tener un color, el automóvil en sí va a ser una entidad, porque básicamente es solo, ya sabes, una colección de diferentes componentes reunidos. Entonces, básicamente, ese es el concepto principal detrás de ECS. Básicamente queremos separar, ya sabes, diferentes, quieres separar el diferente[56] comportamiento y data en tus juegos en componentes. Y de esa manera, es fácil para ti, es básicamente fácil para ti, ya sabes, elegir cualquier componente que necesites. Ya sabes, al construir una entidad o para crear un objeto en tu juego, es fácil para ti, ya sabes, simplemente elegir diferentes componentes, ya sabes, como parte de las entidades. Y básicamente como, ya sabes, construir un nuevo, ya sabes, un nuevo objeto para tu juego, como directamente de la caja. Entonces, y básicamente, las entidades son identificadores únicos, como mencioné, y los componentes son solo data que se adjuntan a las entidades. Ahora, hablando de los sistemas, los sistemas son, por otro lado, básicamente solo una colección de entidades y componentes que realizan una tarea específica. Entonces, solo para, nuevamente, usando esa analogía. Supongamos que en una situación en la que tienes, tal vez, quieres realizar una tarea, digamos, en el caso de un juego de video, ¿verdad?, donde tienes, como, un automóvil, tu juego de video y quieres, básicamente, digamos, mover el automóvil. En esa situación, el único componente que realmente necesitas para realizar esa tarea es, digamos, posición y velocidad, ¿verdad? En este caso, probablemente no tienes ningún interés en, ya sabes, tal vez el color del automóvil o qué tan grande es el automóvil porque no afectan la tarea particular que deseas realizar en ese momento específico, ¿verdad? Entonces, básicamente, lo que hace el sistema es, básicamente, como, funciones que te ayudan a, como, separar, como, tareas específicas y los componentes específicos que están relacionados para que realmente puedas realizar la tarea. Y, básicamente, a largo plazo, lo que hace es que facilita, ya sabes, gestionar tu código, hace que tu código sea más manejable. Entonces, ¿cómo funciona ECS? Las entidades se crean y destruyen en tiempo de ejecución por tu motor de juego. Las entidades son básicamente solo objetos en tus juegos. Agregas componentes, tu motor de juego agrega, ya sabes, o elimina componentes de ellas en tiempo de ejecución. Eso es de tus entidades, ¿verdad? Y luego tus sistemas se actualizan regularmente, ya sabes, según las operaciones que realizas o que el usuario realiza dentro de los juegos. Entonces, ¿por qué ECS es tan popular, ya sabes, es una arquitectura de desarrollo de juegos muy popular, ¿verdad? ¿Y por qué es así? Es una buena elección para el desarrollo de juegos porque, en primer lugar, promueve la reutilización de código, ¿verdad? Como explicamos anteriormente, tienes, ya sabes, componentes específicamente definidos, lo que significa que puedes agarrar fácilmente un componente y adjuntarlo a diferentes entidades, no solo a un tipo de entidad. Puedes puedes crear fácilmente un objeto de juego modificado. Básicamente, todo lo que tienes que hacer es, ya sabes, definir una entidad de juego y simplemente crear una nueva, adjuntar algunos componentes a ella. Y también puede ayudar a admitir un acceso eficiente a los data, como, ya sabes, separación de, como, todos tus data en componentes bien definidos. Y se puede escalar fácilmente, ya sabes, a medida que tu juego se vuelve más grande, puedes escalarlo fácilmente. Entonces, solo para agregar, como, un pequeño ejemplo de código, solo para darle sentido a lo que he estado hablando hasta ahora. Entonces, en este ejemplo aquí, puedes ver que tienes, tienes un componente de posición, tienes un componente de velocidad. Y tu componente de posición, puedes ver, básicamente, solo tienes tu eje X y eje Y, ¿verdad? Y tu componente de velocidad, también tienes tu eje X y Y. Y luego tienes tu sistema de movimiento. Y esos, okay, volviendo atrás. Los componentes, como,

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Entendiendo la Arquitectura Fiber de React
React Advanced 2022React Advanced 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.
Haciendo JavaScript en WebAssembly Rápido
JSNation Live 2021JSNation Live 2021
29 min
Haciendo JavaScript en WebAssembly Rápido
Top Content
WebAssembly enables optimizing JavaScript performance for different environments by deploying the JavaScript engine as a portable WebAssembly module. By making JavaScript on WebAssembly fast, instances can be created for each request, reducing latency and security risks. Initialization and runtime phases can be improved with tools like Wiser and snapshotting, resulting in faster startup times. Optimizing JavaScript performance in WebAssembly can be achieved through techniques like ahead-of-time compilation and inline caching. WebAssembly usage is growing outside the web, offering benefits like isolation and portability. Build sizes and snapshotting in WebAssembly depend on the application, and more information can be found on the Mozilla Hacks website and Bike Reliance site.

Workshops on related topic

Domina los Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Domina los Patrones de JavaScript
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
Crea un Juego Con PlayCanvas en 2 Horas
JSNation 2023JSNation 2023
116 min
Crea un Juego Con PlayCanvas en 2 Horas
Top Content
Featured WorkshopFree
Steven Yau
Steven Yau
En esta masterclass, construiremos un juego utilizando el motor WebGL de PlayCanvas desde el principio hasta el final. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la escritura de scripts, la creación de UI y mucho más.
Tabla de contenido:- Introducción- Introducción a PlayCanvas- Lo que vamos a construir- Agregando un modelo de personaje y animación- Haciendo que el personaje se mueva con scripts- 'Falsa' carrera- Agregando obstáculos- Detectando colisiones- Agregando un contador de puntuación- Fin del juego y reinicio- ¡Resumen!- Preguntas
Nivel de la masterclassSe recomienda familiaridad con los motores de juegos y los aspectos del desarrollo de juegos, pero no es obligatorio.
Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web
React Summit 2024React Summit 2024
92 min
Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web
Featured Workshop
Vivek Nayyar
Vivek Nayyar
Sumérgete en el mundo de la IA con nuestro masterclass interactivo diseñado específicamente para desarrolladores web. "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" ofrece una oportunidad única para cerrar la brecha entre la IA y el desarrollo web. A pesar de la prominencia de Python en el desarrollo de IA, el vasto potencial de JavaScript sigue siendo en gran medida inexplorado. Este masterclass tiene como objetivo cambiar eso.A lo largo de esta sesión práctica, los participantes aprenderán cómo aprovechar LangChain, una herramienta diseñada para hacer que los modelos de lenguaje grandes sean más accesibles y útiles, para construir agentes de IA dinámicos directamente dentro de entornos JavaScript. Este enfoque abre nuevas posibilidades para mejorar las aplicaciones web con funciones inteligentes, desde el soporte al cliente automatizado hasta la generación de contenido y más.Comenzaremos con los conceptos básicos de LangChain y los modelos de IA, asegurando una base sólida incluso para aquellos nuevos en IA. A partir de ahí, nos sumergiremos en ejercicios prácticos que demuestran cómo integrar estas tecnologías en proyectos reales de JavaScript. Los participantes trabajarán en ejemplos, enfrentando y superando los desafíos de hacer que la IA funcione sin problemas en la web.Este masterclass es más que una experiencia de aprendizaje; es una oportunidad de estar a la vanguardia de un campo emergente. Al final, los asistentes no solo habrán adquirido habilidades valiosas, sino que también habrán creado funciones mejoradas con IA que podrán llevar a sus proyectos o lugares de trabajo.Ya seas un desarrollador web experimentado curioso acerca de la IA o estés buscando expandir tus habilidades en áreas nuevas y emocionantes, "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" es tu puerta de entrada al futuro del desarrollo web. Únete a nosotros para desbloquear el potencial de la IA en tus proyectos web, haciéndolos más inteligentes, interactivos y atractivos para los usuarios.
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
React Day Berlin 2022React Day Berlin 2022
86 min
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
Top Content
WorkshopFree
Hussien Khayoon
Kahvi Patel
2 authors
Usar una biblioteca puede parecer fácil a primera vista, pero ¿cómo eliges la biblioteca correcta? ¿Cómo actualizas una existente? ¿Y cómo te abres camino a través de la documentación para encontrar lo que quieres?
En esta masterclass, discutiremos todos estos puntos finos mientras pasamos por un ejemplo general de construcción de un editor de código usando CodeMirror en React. Todo mientras compartimos algunas de las sutilezas que nuestro equipo aprendió sobre el uso de esta biblioteca y algunos problemas que encontramos.
PlayCanvas de principio a fin: la versión rápida
JS GameDev Summit 2022JS GameDev Summit 2022
121 min
PlayCanvas de principio a fin: la versión rápida
Top Content
WorkshopFree
João Ruschel
João Ruschel
En esta masterclass, construiremos un juego completo utilizando el motor PlayCanvas mientras aprendemos las mejores prácticas para la gestión de proyectos. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la gestión de activos, scripting, audio, depuración, y mucho más.