Librería para juegos 2D sencillos en C++ ¿SFML o SDL?

Pues básicamente eso, ¿alguien ha usado alguna de las dos? ¿Alguna otra recomendación?

Busco simplicidad, que esté medianamente establecida y que sea multiplataforma (y, obviamente, que sea libre).
Yo he probado las dos, y sin dudas SFML. Te enumero las ventajas de SFML:

- SFML es para C++, mientras que SDL está en C. Por lo que no hay objetos, operadores, etc...
- SDL es una librería software, mientras que SFML está montada sobre OpenGL, de modo que se usa aceleración hardware.
- SFML se puede combinar con OpenGL, es más, la librería te pone muchas utilidades para ello.
- En mi opinión, tiene más herramientas y facilidades que SDL.

Eso si, el enfoque es un pelín diferente. Pero cuando te acostumbres lo llevaras con soltura y te darás cuenta de lo comodo que es, por ejemplo el patrón textura-sprite:

- Textura: Imagen residente en la vram, es un simple contenedor, no se pueden dibujar.
- Sprite: Dada la referencia a una textura, definen operaciones sobre ella (posición, rotación, escalado...). Los sprites si pueden ser dibujados, varios sprites pueden compartir una misma textura sin problemas (de ahí su gran utilidad).

Este patrón se repite por toda la librería en diversas utilidades (sonido, texto...) y hay que acostumbrarse a ello.
@amchacon

Thanks.

Una puntualización; se supone que SDL2.0, que es la versión actual, sí que tiene aceleración hardware. En principio, no obstante, me inclinaba por SFML precisamente porque está hecha en C++, aunque tras hacer un hola mundo en ambas, el enfoque de SDL me parece más simple y directo (supongo que en parte porque normalmente programo en C, no en C++ [+risas] )

¿Algún libro/curso/tutorial decente de SFML que hayas usado?
Korso10 escribió:@amchacon

Thanks.

Una puntualización; se supone que SDL2.0, que es la versión actual, sí que tiene aceleración hardware. En principio, no obstante, me inclinaba por SFML precisamente porque está hecha en C++, aunque tras hacer un hola mundo en ambas, el enfoque de SDL me parece más simple y directo (supongo que en parte porque normalmente programo en C, no en C++ [+risas] )

¿Algún libro/curso/tutorial decente de SFML que hayas usado?

Ah bueno, la verdad esque la nueva 2.0 no la llegué a usar [+risas]

Korso10 escribió:¿Algún libro/curso/tutorial decente de SFML que hayas usado?

Los tutoriales de la web:
http://www.sfml-dev.org/tutorials/2.3/

Más su documentación:
http://www.sfml-dev.org/documentation/2.3/modules.php

Con eso yo lo he ido sacando todo, no me ha hecho falta nada más :)
Entre las que dices SDL.

Si quieres abrir fronteras y hacer juegos, Haxe + OpenFL/Flixel. SDL si quieres currarte desde 0 el motor y demás es lo adecuado, pero si como digo quieres hacer juegos y poder exportarlos fácilmente a otras plataformas, Haxe.

Edit: No he leído que lo querías para programar en C++. Aunque Haxe al fin y al cabo es un metalenguaje que compila a C++ por debajo, si lo que quieres es C++ te recomiendo entonces cocos2d-x.
SFML no lo he tocado, pero si he programado un par de juegos en Linux bajo SDL (primero con la versión 1, más tarde con la 2).

SDL es bastante sencillo de aprender, no tiene mucho misterio. Tiene varios módulos que cubren las diferentes partes del juego (gráficos, música, soporte de red...) aunque, como bien te han dicho, tienes que currarte tu el motor. Lo bueno de programarlo así es que los juegos que hice han saltado a otras plataformas con bastante facilidad (Wii, GP2X, Openpandora, Raspberry, etc.).

Como alternativa, tienes Godot, un motor de código libre con un entorno gráfico para centrarte en el juego (y un lenguaje de programación detrás).

P.D.: SDL2 proporciona aceleración por OpenGL.
Gracias a los dos. De momento he empezado con SFML a ver qué tal me va. No obstante dejo SDL en la recámara y al final no me convence, y me apunto también Haxe (que lo había visto, pero lo descarté por tener que aprender otro lenguaje, por sencillo que fuese) y Cocos2D-X :)

@nevat

¿Esos juegos se pueden ver? XD
Korso10 escribió:@nevat

¿Esos juegos se pueden ver? XD


Claro que si, ambos están bajo licencia GPL3.

El primero es una reescritura (no hay código fuente, así que tocó hacerlo desde 0) de un juego de Locomalito. L'Abbaye des Morts

https://github.com/nevat/abbayedesmorts-gpl

El segundo, un juego de MSX. Griel's Quest for the Sangraal

https://github.com/nevat/griels-quest

Ambos están empaquetados en AUR para ArchLinux.
Y por estas cosas mola el software libre, ya tengo tutorial de SDL [beer], y he visto que también has portado Hydorah [tadoramo]
Korso10 escribió:Y por estas cosas mola el software libre, ya tengo tutorial de SDL [beer], y he visto que también has portado Hydorah [tadoramo]

Bueno, como inicio te puede valer, yo soy muy malo programando (esos dos juegos fueron mis primeros programas en C) seguramente encontrarás muchas burradas en el código.

Hydorah, bueno, es algo que tengo pendiente e intentado varias veces. Es mucho más complejo que esos dos juegos, con mi nivel actual de conocimientos no puedo tirarlo adelante.
Yo me quedo con la SDL2.

Te dejo este video, vale la pena darle un vistazo para una mejor vision de SDL.
https://www.youtube.com/watch?v=MeMPCSqQ-34

Dicho esto, mi opion:
- Es C, y siempre puedes añadir tus clases encima si vas a usar c++. Pero este argumento de esto es mejor pq esta escrito en X lenguaje es un poco vago para mi gusto: el lenguage en el que programes ha de ser el que tu domines y sobretodo sepas sacarle rendimiento. Lo demas es como los colores, cada uno tiene su gusto. Dicho esto, personalemnte yo prefiero C++11/14, pero enlazar con librerias de C y hacer un thin wrapper o seter es cuestion de muy poco trabajo.

- Es muy directa y me parece mas clara para lo que la uso: Yo uso mayormente la uso para crear ventanas opengl y para que me controle los inputs de teclado/joystick/mouse. Imagenes, texturas, y modelos suelo usar o cargadores propios.
1-Para dibujar sprites y texturas, ambas están obsoletas.
No entiendo que XNA en 2010 soportara spritebatchs y ni SFML ni SDL en pleno 2015 todavía no lo soporten. SFML soporta los obsoletos vertex arrays, pero no es lo mismo. (Otros frameworks como Cocos2d-x y LibGdx si soportan Spritebatchs).


2-Para capturar eventos y crear una ventana para renderizar con OpenGL, cualquiera de las dos vale.
(mensaje borrado)
12 respuestas