Gosu (biblioteca)
Gosu | ||
---|---|---|
Información general | ||
Tipo de programa | Desarrollo de videojuegos | |
Desarrollador | Julian Raschke | |
Licencia | Licencia MIT | |
Información técnica | ||
Programado en | C++, Ruby | |
Plataformas admitidas |
Microsoft Windows, Linux, macOS, iOS | |
Versiones | ||
Última versión estable | 1.4.6 (info) ( 20 de mayo de 2023) | |
Enlaces | ||
Gosu es una biblioteca para el desarrollo de videojuegos en dos dimensiones en C++ y Ruby, disponible para los sistemas Mac OS X, Microsoft Windows y GNU/Linux. La versión para C++ también está disponible para iPhone, iPod e iPad.
Esta biblioteca se ha utilizado en toda clase de juegos 2D, especialmente en game jams, incluyendo juegos de disparos, de scroll horizontal, juegos en perspectiva isométrica, etc.
Gosu es software libre distribuido bajo la licencia MIT. Para la reproducción de sonidos Gosu utiliza SDL sound Y MojoAL que es una implementación de OpenAL para SDL2.[1]
Principales características
[editar]Gosu ofrece interfaces sencillas para el acceso a recursos.
- Gráficos y texto 2D, con aceleración 3D por hardware (OpenGL)
- Reproducción de samples y música en diversos formatos y con transformaciones en línea.
- Soporte de dispositivos de entrada como teclado, ratón y mandos de juego. Sistema multitáctil en sistemas iOS.
Se trata de una biblioteca pensada para el desarrollo de juegos, y completamente orientada a objetos, por lo que el esquema de clases se adapta perfectamente al diseño de un juego, basando, por ejemplo, el orden de ejecución en el típico game loop.
Gosu evita añadir características superfluas o inútiles, ya que el objetivo es reunir en una biblioteca las herramientas necesarias para hacer un juego real, dejando fuera cualquier clase de funcionalidad que no tenga una utilidad real, o funcionalidades que ya estén implementadas en otras bibliotecas. De hecho, internamente Gosu hace un uso intensivo de otras bibliotecas, en especial de las bibliotecas boost.
Gosu intenta colocarse como una alternativa más rápida y sencilla de aprender que la SDL, ya que gracias a la orientación a objetos se consigue modelar perfectamente el diseño básico de cualquier juego, además de abstraer lo máximo posible el código de bajo nivel que a menudo podemos encontrar en la SDL.
Además, Gosu implementa de forma nativa y transparente al usuario la aceleración por hardware mediante el uso de OpenGL, por lo que el rendimiento es superior y se facilitan las operaciones de dibujado en profundidad y transparencias.
Ejemplo básico
[editar]En este ejemplo básico, se abre una ventana en la que se muestra una imagen "prueba.png" y un texto "Hola mundo".
#include <Gosu/Gosu.hpp>
#include <iostream>
#include <tr1/memory>
using namespace std;
class Ventana : public Gosu::Window{
public:
Ventana() : Gosu::Window(640, 480, false){
Imagen.reset(new Gosu::Image(graphics(),
L"prueba.png"));
Fuente.reset(new Gosu::Font(graphics(),
Gosu::defaultFontName(),
30));
}
void update(){
// Aquí va la lógica del juego
}
void draw(){
Imagen -> draw(10, 10, 1);
Fuente -> draw(L"Hola mundo", 10, 260, 1);
}
void buttonDown(Gosu::Button B){
if(B == Gosu::kbEscape){
close();
}
}
private:
tr1::shared_ptr<Gosu::Image> Imagen;
tr1::shared_ptr<Gosu::Font> Fuente;
};
int main(int argc, char *argv[])
{
Ventana V;
V.show();
return 0;
}
Y este es el programa anterior hecho en Ruby
require 'gosu'
class Ventana < Gosu::Window
def initialize
super 640, 480, false
@imagen = Gosu::Image.new("prueba.png")
@fuente = Gosu::Font.new(30)
end
def update
# Aqui va la logica del juego
end
def button_down(id)
close if id == Gosu::Button::KbEscape
end
def draw
@imagen.draw(10, 10, 1)
@fuente.draw_text("Hola mundo", 10, 260, 1)
end
end
Ventana.new.show
Referencias
[editar]- ↑ «Dependencias de Gosu». GitHub (en inglés). Consultado el 2 de octubre de 2023.
Enlaces externos
[editar]- Sitio web oficial de Gosu
- Forja de Gosu en GoogleCode
- Programación de videojuegos con Gosu en C++: parte1, parte2, parte3.
- Aprende a programar videojuegos en C++ con Gosu (mini-tutorial en transparencias)
- Tutorial básico en Ruby (en inglés)
- Tutorial básico en C++ (en inglés)