[ Inglés | Deutsch | Español | Francés | 日本語 ]
Goku es una aplicación de desarrollo de juegos 2D para Rust (con integración futura con juegos 3D). Escrito puramente en Rust.
Está disponible para macOS, Windows y Linux.
Basado en SDL2 (actualmente).
Goku es enfocado, ligero y tiene pocas dependencias (principalmente SDL2). Proporciona:
- una ventana y un bucle principal
- gráficos y texto en 2D
- sonidos y música
- entrada de teclado, ratón y gamepad
- interfaz de usuario gráfica para desarrollo
- Generador de personajes en pixel usando IA
librerías de terceros utilizadas actualmente por Goku:
- SDL2
- nalgebra
- imgui
- serde
- rfd
- glow
- webbrowser
¡IMPORTANTE!
- Una visión general rápida está aquí -> Goku Engine
- La documentación se encuentra aquí -> Gitbook
- Un blog de desarrollo que cubre nuestro progreso, planes y nuevas características se encuentra aquí -> Noticias
- Todos los ejemplos están aquí -> Ejemplos Oficiales
Instala estos a través de tu herramienta de gestión de paquetes favorita, o a través de http://www.libsdl.org/
Ejemplo de Ubuntu:
sudo apt-get install libsdl2-dev
Ejemplo de Fedora:
sudo dnf install SDL2-devel
Ejemplo de Arch: (Arch no tiene paquetes regulares y de desarrollo separados, todo va junto.)
sudo pacman -S sdl2
También podrías necesitar un compilador de C (gcc
).
Puedes optar por vincular SDL2 estáticamente en lugar de dinámicamente con la característica static-link
.
En Linux, deberás hacer adicionalmente una de las siguientes:
- usar la característica
bundled
- usar la característica
use-pkgconfig
para que rustc sepa dónde buscar tus bibliotecas SDL2 y sus dependencias para la vinculación estática. Esto es necesario porque no hay una forma incorporada de encontrar los recursos necesarios para vincular estáticamente SDL2 desde tu sistema - instalar bibliotecas de desarrollo con [vcpkg][vcpkg]. Las instrucciones para generar un binario estático en Linux y otros sistemas operativos usando vcpkg están [aquí][cargo-vcpkg-usage]
En macOS, es una buena idea instalar estos a través de [homebrew][homebrew].
brew install sdl2
En las versiones recientes de Homebrew, las bibliotecas instaladas suelen estar vinculadas en $(brew --prefix)/lib
.
Si estás ejecutando una versión anterior, el enlace simbólico para SDL podría residir en /usr/local/lib
.
Para facilitar la vinculación de las bibliotecas instaladas por Homebrew, haz lo siguiente para tu shell respectiva.
Agrega esta línea a tu ~/.zshenv
o ~/.bash_profile
dependiendo de si usas ZSH o Bash.
export LIBRARY_PATH="$LIBRARY_PATH:$(brew --prefix)/lib"
-
Descarga las bibliotecas de desarrollo MSVC desde http://www.libsdl.org/ (SDL2-devel-2.0.x-VC.zip).
-
Descomprime SDL2-devel-2.0.x-VC.zip en una carpeta de tu elección (Puedes eliminarla después).
-
Copia todos los archivos lib de
SDL2-devel-2.0.x-VC\SDL2-2.0.x\lib\x64\
a (para Rust 1.6 en adelante)
C:\Program Files\Rust*lib*\rustlib\x86_64-pc-windows-msvc\lib
o a (para las versiones de Rust 1.5 y anteriores)
C:\Program Files\Rust*bin*\rustlib\x86_64-pc-windows-msvc\lib
o a tu carpeta de bibliotecas de elección, y asegúrate de tener una variable de entorno del sistema de
LIB = C:\tu\carpeta\de\biblioteca\de\rust
Para los usuarios de Rustup, esta carpeta estará en
C:\Users{Tu Nombre de Usuario}.rustup\toolchains{cadena de herramientas actual}\lib\rustlib{cadena de herramientas actual}\lib
Donde la cadena de herramientas actual es probablemente stable-x86_64-pc-windows-msvc
.
-
Copia SDL2.dll de
SDL2-devel-2.0.x-VC\SDL2-2.0.x\lib\x64\
a tu proyecto de cargo, justo al lado de tu Cargo.toml.
-
Cuando vayas a enviar tu juego, asegúrate de copiar SDL2.dll al mismo directorio que tu exe compilado, de lo contrario, el juego no se iniciará.
Las bibliotecas de desarrollo MSVC proporcionadas por http://libsdl.org/ no incluyen una biblioteca estática. Esto significa que si deseas usar la característica static-link
con la cadena de herramientas windows-msvc, tendrás que hacer una de las siguientes:
- construir una biblioteca estática SDL2 por ti mismo y copiarla al directorio
lib
de tu cadena de herramientas; o - también habilitar la característica
bundled
, que construirá una biblioteca estática para ti; o - usar una biblioteca SDL2 estática de vcpkg como se describe a continuación.
Para la nueva característica de generador de personajes en píxel, asegúrate de que Python 3 y PyTorch estén instalados. Actualmente la IA está escrita en Python, sin embargo, hay un plan para reescribirla en Rust utilizando tch-rs.
pip3 install torch torchvision torchaudio
Para más información consulta aquí
PyO3 usa un script de compilación (respaldado por la biblioteca pyo3-build-config) para determinar la versión de Python y establecer los argumentos del enlazador correctos. Por defecto intentará usar lo siguiente en orden:
- Cualquier entorno virtual activo de Python.
- El ejecutable python (si es un intérprete de Python 3).
- El ejecutable python3.
Puedes anular el intérprete de Python estableciendo la variable de entorno PYO3_PYTHON
, por ejemplo, PYO3_PYTHON=python3.6
, PYO3_PYTHON=/usr/bin/python3.9
, o incluso un intérprete PyPy PYO3_PYTHON=pypy3
.
A veces PyO3 puede dar un error al enlazar bibliotecas de Python; para este caso se puede usar una variable de entorno:
Para Windows:
$env:LIB += ";<ubicación_de_la_biblioteca_python>"
Para UNIX:
export LIB=$LIB:/ubicación_de_la_biblioteca_python
-
Gráficos:
-
una ventana y un bucle principal
-
gráficos y texto en 2D
- Botón
- Deslizador
- Casilla de verificación
- Cuadro de texto
- Fuentes (solo formato ttf)
- Sistema de partículas (chispas)
- Fondo parallax
-
interfaz de usuario gráfica para desarrollo
- editor de texto incorporado
- Consola de depuración
-
Varios formatos de archivo de imagen: JPG y PNG
-
Iluminación:
- Luz puntual
- Luz de foco
- Filtro de luz ambiental
-
-
Audio
- Reproducir
- Bucle
- Pausa
- Reanudar
- Varios formatos de archivo de audio: OGG, MP3, FLAC, MOD
-
Controlador de entrada:
- entrada de teclado, ratón y gamepad
-
Tipos matemáticos:
- Vector2, Vector3, Vector4
- Matrix33, Matrix34, Matrix43, Matrix44
-
Física:
- Colisiones
- Cuerpo rígido (actualmente no tenemos un cuerpo rígido cinemático)
-
Escena:
- Formato de archivo JSON flexible: Podría describir una escena completa o mallas individuales.
-
Animación
-
Sistema de IA:
- Árbol de comportamiento
-
Temporizador
-
Sistema de diálogo
-
Perfilador
-
Soporte para VSCode
-
Soporta varios idiomas:
- Alemán
- Español
- Japonés
- Francés
-
Plataforma compatible:
git clone https://github.com/ladroid/goku.git
- extraer todo
- comando para ejecutar:
cargo run
¡Importante! Actualmente la GUI aún está en desarrollo, estoy intentando combinar imgui y sdl2 juntos pero necesito algo de tiempo para hacerlo completamente compatible. Por lo tanto, si alguien quiere usarlo, es posible agregar el componente
Scene
y escribir un script allí. ¡Si sabes cómo combinarlos sería realmente genial!
- Presiona Herramientas
- Presiona Construir y elige Web
Para habilitar Viewport ve a Preferencias -> General -> Habilitar lienzo, lo mismo con el modo de vista de cuadrícula
-
finalmente hacer un archivo .rs separado en lugar de uno grande -
hacer una ventana de visualización en lugar de la solución actual con lienzo (probablemente necesite una ventana separada dentro de la aplicación con combinación de sdl2 y OpenGL) -
combinar con wgpu (Ejemplo de la biblioteca sdl2 y renderizador imgui para wgpu-rs)
-
mejorar la física
-
agregar/mejorar el sistema de UI (hacer posible agregar imagen para botones)
-
mejorar luces y sombras -
dibujar formas simples (círculo, rectángulo, triángulo, etc.)
-
pestañas -
mejorar el perfilador -
agregar/mejorar el sistema de partículas -
mejorar la GUI del motor así como el editor de texto (probablemente en lugar del editor de texto incorporado hacer una integración con VSCode u otro IDE) -
agregar planos (probablemente imgui node graph https://github.com/benmkw/imnodes-rs)
-
construir juegos para móviles iOS, Android
-
construir juegos para consolas (PS4-5), Xbox, Nintendo Switch
-
material físico
-
integración con C++ (probablemente algo como un bindgen)
El ejemplo de construcción de un juego de tetris se puede encontrar aquí
El ejemplo de construcción de un prototipo roguelike se puede encontrar aquí
- Chispas -> usa una función
spawn_particles_sparks
de aquí - Fuego -> usa una función
spawn_particles_fires
de aquí - Lluvia -> usa una función
spawn_particles_rain
de aquí
El ejemplo de construcción de un prototipo de desplazamiento lateral se puede encontrar aquí
El ejemplo de construcción de un prototipo de plataformas se puede encontrar aquí
El ejemplo de construcción de un prototipo de plataformas se puede encontrar aquí
La versión japonesa se puede encontrar aquí
La versión francesa se puede encontrar aquí
La versión alemana se puede encontrar aquí
La versión española se puede encontrar aquí
Usa el Issue Tracker para enviar informes de errores y solicitudes de características/mejoras. Antes de enviar un nuevo problema, asegúrate de que no haya un problema abierto similar.
¡Cualquiera que pruebe manualmente el código e informe errores o sugerencias de mejoras en el Issue Tracker es muy bienvenido!
Los parches/correcciones se aceptan en forma de pull requests (PRs). Asegúrate de que el problema que aborda la pull request esté abierto en el Issue Tracker.
La pull request presentada se considera que ha aceptado publicar bajo la licencia Apache 2.0.
Goku está licenciado bajo la versión de la licencia Apache 2.0. Ver archivo LICENCIA.