Cómo no construir un videojuego

Rate this content
Bookmark

En esta charla profundizaremos en el arte de crear algo significativo y gratificante. A través de la mirada de mi propio viaje de redescubrir mi pasión por la programación y construir un videojuego desde cero con JavaScript y React, exploraremos los compromisos entre soluciones fáciles y rendimiento rápido. Obtendrás información valiosa sobre prototipado rápido, infraestructura de pruebas y una variedad de trucos de CSS que se pueden aplicar tanto al desarrollo de juegos como a tu trabajo diario.

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

FAQ

Athena Crisis es un juego de estrategia moderno retro en 2D por turnos que se ejecuta dentro de una presentación de diapositivas usando MDX, un fork de Markdown que permite integrar componentes de React en presentaciones.

El juego fue desarrollado usando JavaScript, React, CSS, Vite, PMPM, TypeScript, Relay, Emotion, Prisma, GraphQL, GraphQL Pothos, Socket.io y estructuras de datos persistentes.

Athena Crisis puede ser traducido a cualquier idioma y ejecutarse dentro de la presentación en cualquier idioma en el que se haya traducido el juego.

El editor de mapas permite crear nuevos mapas con solo dos restricciones para asegurar que todos los mapas se vean automáticamente hermosos, basados en la ubicación de la ficha y las fichas que la rodean.

El juego aprovecha las APIs de accesibilidad web para funcionar para personas con diversos grados de daltonismo, y también soporta modos de luz y oscuro.

Se encontraron problemas de rendimiento relacionados con el uso intensivo de CSS y JavaScript, como la desaceleración repentina y el uso de propiedades CSS que no siempre están aceleradas por GPU.

El juego fue probado renderizando el estado del juego como texto o imágenes y comparando estas representaciones con estados esperados para verificar la corrección durante el desarrollo.

Christoph Nakazawa
Christoph Nakazawa
32 min
02 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla muestra el desarrollo de un videojuego llamado Athena Crisis utilizando tecnologías web como JavaScript, React y CSS. El juego se construye desde cero e incluye características como múltiples estados de juego, oponentes de IA y edición de mapas. Demuestra los beneficios de usar CSS para el desarrollo de juegos, como tiempos de carga instantáneos y transiciones suaves. La charla también aborda la optimización del rendimiento, el soporte de modo oscuro y la publicación del juego en otras plataformas.
Available in English: How Not to Build a Video Game

1. Introducción a la Charla

Short description:

Solo estoy aquí para hacer otro sorteo. Esta charla es un poco diferente. Voy a mostrarles tecnologías que usan todos los días en su trabajo como ingenieros front-end, pero en un contexto en el que probablemente nunca las hayan visto usar. Permítanme mostrarles el videojuego que estoy construyendo. Se llama Athena Crisis. Es un juego de estrategia moderno retro en 2D por turnos. Este juego se ejecuta dentro de la presentación de diapositivas que está escrita usando MDX, que es un fork de React. Una vez que me di cuenta de que podía poner una versión del juego en mi presentación, también pude poner tres en ella. Y puedo jugar contra la IA, como estar sentado en Central Park en Nueva York y jugar ajedrez rápido, jugar múltiples partidas.

¿Quieren hacer otro sorteo? No.

Hey, esta conferencia fue increíble. Hay tanta gente detrás del escenario, en todas partes haciendo de MCs, están los organizadores, hay Así que demos un aplauso a todas las personas que hicieron esto posible.

Esta charla es un poco diferente. Solo quiero que todos ustedes se relajen y quiero entretenerlos. No estoy aquí para vender nada, no estoy aquí para convencerlos de que lo que estoy haciendo es mejor que lo que todos los demás están haciendo. Todo lo contrario. Lo más probable es que lo que estoy haciendo sea mucho peor de lo que deberían hacer. Hoy voy a hablar sobre cómo no construir un video juego y les mostraré tecnologías que usan todos los días en su trabajo como ingenieros front-end, pero en un contexto en el que probablemente nunca las hayan visto usar. Y espero inspirarlos a hacer las cosas de manera diferente. A pensar más en soluciones específicas del dominio en lugar de construir otro formulario de 11 pasos.

Permítanme mostrarles el video juego que estoy construyendo. Aquí hay un video. Se llama Athena Crisis. Es un juego de estrategia moderno retro en 2D por turnos. En realidad, espera un minuto, falta algo aquí. Creo que falta música. Permítanme abrir VS code. Permítanme poner la música. ¿Tienen música? ¿No? Oh... Sí, eso es Athena Crisis. Supongo que se dieron cuenta de que todo esto es React. Y no solo React, este juego se ejecuta dentro de la presentación de diapositivas que está escrita usando MDX, que es un fork de React. Perdón, que es un fork de Markdown que te permite poner componentes de React en tus presentaciones. Así que tengo el juego ejecutándose dentro de una presentación de diapositivas que está escrita en JavaScript, React y CSS. Permítanme deshacerme de VS code de nuevo. Una vez que me di cuenta de que podía poner una versión del juego en mi presentación, también pude poner tres en ella. Y puedo jugar contra la IA, como estar sentado en Central Park en Nueva York y jugar ajedrez rápido, jugar múltiples partidas. Así que puedo esperar aquí hasta que la IA termine.

2. Building and Testing the Game

Short description:

Esperemos un segundo. La IA está tratando de vencerme. Ahora puedo entrar y jugar el juego simultáneamente en todos los mapas. También puedo traducir el juego a cualquier idioma y hacerlo funcionar en la presentación. Además, puedo incluir el editor de mapas en la presentación, lo que me permite crear nuevos mapas. El juego se construye desde cero utilizando JavaScript, React y CSS, junto con varias otras herramientas. Probar el juego fue importante para asegurarse de que funcionara correctamente, y desarrollé un método para renderizar el estado del juego como texto. Esto facilitó la verificación y evitó problemas al realizar cambios.

La IA está tratando de vencerme. Ahora puedo entrar y puedo jugar el juego simultáneamente en todos estos mapas. Luego me di cuenta de que también puedo simplemente traducir este juego a cualquier idioma y hacer que el juego se ejecute dentro de esta presentación en cualquier idioma en el que se haya traducido el juego. Incluso más, me di cuenta, hagamos uno diferente, me di cuenta de que puedo incluir el editor de mapas que construí en la presentación. Así que puedo entrar aquí y crear un nuevo mapa. Y solo hay dos restricciones aquí para que todo esto funcione, para que todos los mapas se vean automáticamente hermosos. Una es, ¿puedes colocar esta ficha en esta ubicación? Y dos, dependiendo de las fichas que me rodean, ¿cómo debería verse esta ficha?

Por ejemplo, puedes combinar cualquier combinación de árboles. Puedes ir al editor de escenarios, puedes elegir el personaje que te guste, elegir su foto de perfil, por ejemplo. Y luego, desde allí, puedes entrar directamente en el juego y probar los mensajes en el modo de campaña. Esto es Athena Crisis. Todo lo que has visto se construye desde cero con JavaScript, React y CSS. La pila utiliza Vite, PMPM, TypeScript, React, Relay, Emotion, Prisma, GraphQL, GraphQL Pothos, Socket.io y estructuras de datos persistentes.

Escribí una publicación en el blog. Saqué las piezas principales en las que tengo una opinión, como Vite, PMPM, TypeScript, las puse en una plantilla y expliqué cómo armar una experiencia de front-end realmente rápida. La restricción que me impuse cuando comencé esto es que solo puedo usar herramientas en la capa directamente debajo de mí que entiendo tanto que podría construir una versión básica y compatible de ella si fuera necesario. No entiendo los motores de juegos, así que la única forma de usar uno era construir uno por mí mismo. He trabajado en infraestructura de pruebas en el pasado. ¿Cómo pruebas un juego de video? Si estás jugando juegos de video, son juegos AAA y se lanzan, lo primero que haces es descargar un parche de 10 gigabytes porque, desde el momento en que lo enviaron y el momento en que lo lanzaron, encontraron tantos problemas que tuvieron que parchearlo. No hay muchas pruebas y luego comienzas a jugar y hay tantos errores, tantos problemas visuales, todo tipo de problemas, ¿verdad? Y así, me gusta testing. No escribo muchas pruebas, pero quería averiguar cómo puedo asegurarme de que cuando estoy cambiando el juego, no estoy rompiendo algo todo el tiempo. Y recientemente exhibimos este juego en Tokio en una feria de videojuegos y la gente jugó en dos estaciones desde las 10 a. m. hasta las 6 p. m. durante todo el día y no experimentamos un solo error de jugabilidad. No digo que no haya errores, pero en ese día nadie encontró ninguno. Pero de todos modos, lo que haces, tienes este juego de video y tienes estados de juego. ¿Cómo verificas que funcione? Podrías escribir pruebas para verificar, ¿está esto aquí, está esto allí? ¿Tiene este una salud de 50 y este una salud de 77? Y luego cambias el equilibrio y todo se rompe, ¿verdad? O cambias los gráficos y se rompen cosas. Y así pensé, bueno, tal vez solo renderizaré el estado de mi juego como texto. Hago una instantánea de gesto o algo así y hago un renderizador que tome el estado de mi juego y lo convierta en texto. Luego terminas teniendo dos implementaciones de tu renderizador. Uno para el juego real y otro para tus pruebas. Y si estás usando texto para representar el estado de tu mapa, te das cuenta de que es un poco incómodo porque se desincroniza.

QnA

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

Compilador React Forget - Entendiendo React Idiomático
React Advanced Conference 2023React Advanced Conference 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
SolidJS: ¿Por qué tanto Suspense?
JSNation 2023JSNation 2023
28 min
SolidJS: ¿Por qué tanto Suspense?
Top Content
Suspense is a mechanism for orchestrating asynchronous state changes in JavaScript frameworks. It ensures async consistency in UIs and helps avoid trust erosion and inconsistencies. Suspense boundaries are used to hoist data fetching and create consistency zones based on the user interface. They can handle loading states of multiple resources and control state loading in applications. Suspense can be used for transitions, providing a smoother user experience and allowing prioritization of important content.
De GraphQL Zero a GraphQL Hero con RedwoodJS
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
De GraphQL Zero a GraphQL Hero con RedwoodJS
Top Content
Tom Pressenwurter introduces Redwood.js, a full stack app framework for building GraphQL APIs easily and maintainably. He demonstrates a Redwood.js application with a React-based front end and a Node.js API. Redwood.js offers a simplified folder structure and schema for organizing the application. It provides easy data manipulation and CRUD operations through GraphQL functions. Redwood.js allows for easy implementation of new queries and directives, including authentication and limiting access to data. It is a stable and production-ready framework that integrates well with other front-end technologies.
Los Átomos de Jotai Son Simplemente Funciones
React Day Berlin 2022React Day Berlin 2022
22 min
Los Átomos de Jotai Son Simplemente Funciones
Top Content
State management in React is a highly discussed topic with many libraries and solutions. Jotai is a new library based on atoms, which represent pieces of state. Atoms in Jotai are used to define state without holding values and can be used for global, semi-global, or local states. Jotai atoms are reusable definitions that are independent from React and can be used without React in an experimental library called Jotajsx.
Un Marco para Gestionar la Deuda Técnica
TechLead Conference 2023TechLead Conference 2023
35 min
Un Marco para Gestionar la Deuda Técnica
Top Content
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.

Workshops on related topic

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.
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Node Congress 2024Node Congress 2024
152 min
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
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.
Construyendo una Aplicación de Shopify con React & Node
React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Construyendo una Aplicación de Shopify con React & Node
Top Content
WorkshopFree
Jennifer Gray
Hanna Chen
2 authors
Los comerciantes de Shopify tienen un conjunto diverso de necesidades, y los desarrolladores tienen una oportunidad única para satisfacer esas necesidades construyendo aplicaciones. Construir una aplicación puede ser un trabajo duro, pero Shopify ha creado un conjunto de herramientas y recursos para ayudarte a construir una experiencia de aplicación sin problemas lo más rápido posible. Obtén experiencia práctica construyendo una aplicación integrada de Shopify utilizando el CLI de la aplicación Shopify, Polaris y Shopify App Bridge.Te mostraremos cómo crear una aplicación que acceda a la información de una tienda de desarrollo y pueda ejecutarse en tu entorno local.
Construye una sala de chat con Appwrite y React
JSNation 2022JSNation 2022
41 min
Construye una sala de chat con Appwrite y React
WorkshopFree
Wess Cope
Wess Cope
Las API/Backends son difíciles y necesitamos websockets. Utilizarás VS Code como tu editor, Parcel.js, Chakra-ui, React, React Icons y Appwrite. Al final de este masterclass, tendrás los conocimientos para construir una aplicación en tiempo real utilizando Appwrite y sin necesidad de desarrollar una API. ¡Sigue los pasos y tendrás una increíble aplicación de chat para presumir!
Problemas difíciles de GraphQL en Shopify
GraphQL Galaxy 2021GraphQL Galaxy 2021
164 min
Problemas difíciles de GraphQL en Shopify
WorkshopFree
Rebecca Friedman
Jonathan Baker
Alex Ackerman
Théo Ben Hassen
 Greg MacWilliam
5 authors
En Shopify a gran escala, resolvemos algunos problemas bastante difíciles. En este masterclass, cinco oradores diferentes describirán algunos de los desafíos que hemos enfrentado y cómo los hemos superado.

Tabla de contenidos:
1 - El infame problema "N+1": Jonathan Baker - Vamos a hablar sobre qué es, por qué es un problema y cómo Shopify lo maneja a gran escala en varios APIs de GraphQL.
2 - Contextualizando APIs de GraphQL: Alex Ackerman - Cómo y por qué decidimos usar directivas. Compartiré qué son las directivas, qué directivas están disponibles de forma predeterminada y cómo crear directivas personalizadas.
3 - Consultas de GraphQL más rápidas para clientes móviles: Theo Ben Hassen - A medida que tu aplicación móvil crece, también lo harán tus consultas de GraphQL. En esta charla, repasaré diversas estrategias para hacer que tus consultas sean más rápidas y efectivas.
4 - Construyendo el producto del futuro hoy: Greg MacWilliam - Cómo Shopify adopta las características futuras en el código actual.
5 - Gestión efectiva de APIs grandes: Rebecca Friedman - Tenemos miles de desarrolladores en Shopify. Veamos cómo estamos asegurando la calidad y consistencia de nuestras APIs de GraphQL con tantos colaboradores.