31 puntos por GN⁺ 2023-11-26 | 1 comentarios | Compartir por WhatsApp

Encontrarle de nuevo la diversión al código: superar el burnout con desarrollo de juegos

  • Queja frecuente en la comunidad de desarrolladores: se pierde la pasión por programar
  • Consejo para aliviar el burnout: crear tu propio juego para volver a disfrutar programar
  • Experiencia personal de cómo el desarrollo de juegos llevó a enamorarse de la programación
  • Recomendación de desarrollar juegos usando Go y la biblioteca Ebitengine

Principios básicos del desarrollo de juegos

  • Igual que en el cine, un juego es un conjunto de imágenes consecutivas rápidas (frames)
  • Un juego genera imágenes en tiempo real y cambia el siguiente frame según la entrada del usuario
  • En esencia, un juego es un bucle infinito que repite el dibujo de imágenes y la actualización de la lógica

Configuración del proyecto

  • Crear un módulo de Go y agregar la biblioteca Ebitengine
  • Ejecutar una ventana vacía con una implementación mínima de la interfaz del juego

Carga de recursos

  • Se recomienda usar arte hecho por programadores o aprovechar recursos gratuitos
  • Cargar recursos en el código usando el paquete embed

Dibujo de imágenes

  • Realizar todo el trabajo de dibujo dentro del método Draw
  • Usar el método DrawImage de ebiten.Image para dibujar una imagen sobre otra
  • Ajustar posición, rotación y escala de la imagen mediante la estructura DrawImageOptions

Lógica del juego

  • La estructura Game mantiene el estado del juego y cambia ese estado con el método Update
  • Como ejemplo, mantener la posición del jugador con un vector (X, Y)

Movimiento

  • Implementar el movimiento actualizando la posición del jugador en el método Update
  • Cambiar la posición del jugador según la entrada del teclado

Temporizadores

  • Implementar temporizadores para cambiar la lógica del juego según el paso del tiempo
  • Usar la estructura Timer para disparar eventos en intervalos de tiempo específicos

Objetos del juego

  • Encapsular y gestionar objetos del juego como el jugador
  • Cada objeto tiene sus propios métodos Update y Draw

Creación de objetos

  • Crear objetos de meteorito y hacer que aparezcan en los bordes de la pantalla
  • La estructura Game lleva el seguimiento de los objetos meteorito

Disparo de balas

  • Implementar la lógica de disparo y un temporizador de enfriamiento
  • Player crea las balas y Game les da seguimiento

Detección de colisiones

  • Implementar la estructura Rect y el método Collider() para detectar colisiones
  • Revisar colisiones entre objetos dentro de Update del juego

Opinión de GN⁺

Lo más importante de este artículo es que propone una forma para que los desarrolladores superen el burnout y recuperen la pasión por programar. El desarrollo de juegos ofrece la oportunidad de practicar habilidades de programación mediante un proyecto creativo y divertido, al mismo tiempo que permite aprender un nuevo lenguaje o biblioteca. Este texto puede inspirar a los desarrolladores a volver a disfrutar la programación como hobby, y despierta interés al explicar un enfoque básico para desarrollar juegos usando Go y la biblioteca Ebitengine.

1 comentarios

 
GN⁺ 2023-11-26
Comentarios de Hacker News
  • El primer usuario prefiere escribir fuegos artificiales o una simulación simple de partículas para probar el rendimiento al aprender un lenguaje nuevo o una nueva API gráfica. Cuando experimentó con Go y Ebitengine en 2021, quedó profundamente impresionado por el rendimiento sorprendente y la facilidad de uso, pudiendo mover muchos píxeles a 60 fps.
  • El segundo usuario desarrolló un juego el año pasado usando el lenguaje Go con g3n-engine. Lo eligió porque le gusta Go y quería aprenderlo, y después de su experiencia previa desarrollando juegos 2D, escogió g3n-engine porque quería trabajar en 3D. Hacer juegos es una experiencia mucho más desafiante y gratificante que el trabajo pagado, y siempre hay algo nuevo que aprender.
  • El tercer usuario menciona que la API de Ebiten para Go es muy buena y que su diseño de API puede servir de inspiración. Además, utiliza un compilador personalizado que convierte Go a C++ para mejorar el rendimiento en el desarrollo de juegos, acceder a APIs de C/C++ y ofrecer buen rendimiento también en WebAssembly. Este compilador también incluye experimentos para generar GLSL a partir de código Go.
  • El cuarto usuario no es desarrollador de Go, pero ha seguido durante mucho tiempo a un YouTuber/streamer de Twitch que hace juegos con Go. Ese streamer está desarrollando un pequeño MMO en Go y también una versión web usando OpenGL y WASM. Aunque entiende que el recolector de basura de Go es muy sólido, mucha gente sigue preguntando: "¿por qué hacerlo en Go?".
  • El quinto usuario reacciona solo a la primera parte del artículo y sugiere que, si el autor está experimentando el burnout que describe, en lugar de "reconquistar" el hobby sería mejor evolucionar sus intereses. Eso puede ser una señal de que su cerebro se está estancando, y no necesariamente tiene que ser algo distinto a la programación, pero podría ser momento de profundizar más en teoría de ciencias de la computación.
  • El sexto usuario, como usuario de Ebitengine desde hace varios años, ha tenido una experiencia satisfactoria. Si alguien quiere ver el código fuente de juegos hechos con Ebitengine, recomienda revisar la lista awesome-ebitengine. Todos los juegos listados en el perfil de itch.io de ese usuario fueron hechos con Ebitengine y todos son open source.
  • El séptimo usuario está desarrollando un juego con Ebitengine y siente que la experiencia es refrescante.
  • El octavo usuario cuestiona si Go es una plataforma adecuada para escribir juegos grandes y si tiene suficientes librerías y rendimiento como para justificar usarlo en lugar de C#.
  • El noveno usuario se pregunta si Go es un lenguaje adecuado para hacer juegos debido al concepto de goroutines, y piensa probarlo algún día.
  • Por último, se menciona un juego basado en Ebitengine y se señala que la frase sobre "cómo podría verse un ejemplo de componente Sprite" está cortada y necesita corregirse.