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.

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
React ofrece un contrato a los desarrolladores: cumple ciertas reglas y React puede actualizar eficiente y correctamente la interfaz de usuario. En esta charla exploraremos estas reglas en profundidad, entendiendo el razonamiento detrás de ellas y cómo desbloquean nuevas direcciones como la memoización automática.
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
¿Demasiado JavaScript te está agobiando? Los nuevos marcos que prometen no usar JavaScript parecen interesantes, pero tienes una aplicación React existente que mantener. ¿Qué tal si Qwik React es tu respuesta para un inicio de aplicaciones más rápido y una mejor experiencia de usuario? Qwik React te permite convertir fácilmente tu aplicación React en una colección de islas, que pueden ser renderizadas en el servidor y rehidratadas con retraso, e incluso en algunos casos, se puede omitir la rehidratación por completo. Y todo esto de manera incremental sin una reescritura.
SolidJS: ¿Por qué tanto Suspense?
JSNation 2023JSNation 2023
28 min
SolidJS: ¿Por qué tanto Suspense?
Top Content
Solid captó la atención de la comunidad frontend al popularizar la programación reactiva con su convincente uso de Señales para renderizar sin re-renderizaciones. Los hemos visto adoptados en el último año en todo, desde Preact hasta Angular. Las Señales ofrecen un conjunto poderoso de primitivas que aseguran que tu interfaz de usuario esté sincronizada con tu estado, independientemente de los componentes. Un lenguaje universal para la interfaz de usuario frontend.
Pero, ¿qué pasa con lo Asíncrono? ¿Cómo logramos orquestar la carga y mutación de datos, el renderizado en el servidor y la transmisión? Ryan Carniato, creador de SolidJS, echa un vistazo a una primitiva diferente. Una que a menudo se malinterpreta pero que es igual de poderosa en su uso. Únete a él mientras muestra de qué se trata todo este Suspense.
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
Todos amamos GraphQL, pero puede ser desalentador poner en marcha un servidor y mantener tu código organizado, mantenible y testeable a largo plazo. ¡No más! Ven a ver cómo paso de un directorio vacío a una API GraphQL completamente desarrollada en cuestión de minutos. Además, verás lo fácil que es usar y crear directivas para limpiar aún más tu código. ¡Vas a amar aún más GraphQL una vez que hagas las cosas Redwood Easy!
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
Jotai es una biblioteca de gestión de estado. La hemos estado desarrollando principalmente para React, pero conceptualmente no está vinculada a React. En esta charla, veremos cómo funcionan los átomos de Jotai y aprenderemos sobre el modelo mental que deberíamos tener. Los átomos son una abstracción agnóstica del marco para representar estados, y básicamente son solo funciones. Comprender la abstracción de átomo ayudará a diseñar e implementar estados en sus aplicaciones con Jotai
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
Seamos realistas: la deuda técnica es inevitable y reescribir tu código cada 6 meses no es una opción. La refactorización es un tema complejo que no tiene una solución única para todos. Las aplicaciones de frontend son particularmente sensibles debido a los frecuentes cambios de requisitos y flujos de usuario. Nuevas abstracciones, patrones actualizados y limpieza de esas viejas funciones - todo suena genial en papel, pero a menudo falla en la práctica: los todos se acumulan, los tickets terminan pudriéndose en el backlog y el código legado aparece en cada rincón de tu base de código. Por lo tanto, un proceso de refactorización continua es la única arma que tienes contra la deuda técnica.En los últimos tres años, he estado explorando diferentes estrategias y procesos para refactorizar el código. En esta charla describiré los componentes clave de un marco para abordar la refactorización y compartiré algunos de los aprendizajes acumulados en el camino. Espero que esto te ayude en tu búsqueda de mejorar la calidad del código de tus bases de código.

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.
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.
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.
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.
De 0 a Autenticación en una Hora para tu Aplicación JavaScript
JSNation 2023JSNation 2023
57 min
De 0 a Autenticación en una Hora para tu Aplicación JavaScript
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend Node.js + frontend Vanilla JS) para autenticar usuarios con contraseñas de un solo uso (correo electrónico) y OAuth, incluyendo:
- Autenticación de usuario: Gestión de interacciones de usuario, devolución de JWT de sesión / actualización- Gestión y validación de sesiones: Almacenamiento seguro de la sesión para solicitudes posteriores del cliente, validación / actualización de sesiones
Al final del masterclass, también abordaremos otro enfoque para la autenticación de código utilizando Flujos de Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.