Entrada sabor tutifruti.
Pero con pocas ganas de escribir :p
Pero con pocas ganas de escribir :p
Bueno esta pequeña entrada es para comentar algunas curiosidades de SDL y etc...
Bueno la primera impresion que todos tenemos de SDL es sencilla. ¡Wau! Que linda librería portable.
Ahora bien cuando empezamos a ver en detalle vemos algunas durezas y que si bien es una API bastante completa, le falta un poco más para poder ser usada comodamente. Gracias a muchos desarrolladores disponemos de librerías complementarias para ampliar el poder de SDL (SDL_Image, SDL_tff, SDL_gfx, SDL_Mixer) y es por esto que en mi opinion SDL se gana unos buenos puntos.
Para alguien con experiencias incorporar las librerías extras no son mucho trabajo, no obstante si sos (como yo) principiante en este asunto te va a costar un poco.
Bueno como dije esta entrada iba a tratar de las curiosidades de SDL y algunos extras, asi que a eso voy.
La primera que me encontre, no fue mas que por parte de mi ignorancia. Cuando estaba implementando la clase Teclado, pense que el array de teclas sería de un tamaño de 255, pero al probar los metodos de esta clase me di cuenta que algo andaba mal. En si el array tiene 322 elementos que corresponden a distintas teclas del teclado (Si ya se el teclado solo tiene 101 teclas) pero bueno, esto es así para simplificarnos las cosas.
La segunda que me encontre fue la del formato de color. Podemos encontrarnos con dos formatos: SDL_Color, y usando un Uint32 de esta manera 0x00RRGGBB. Bueno no se porque se termino implementando SDL_Color ya que la notacion de un Uint32 es bastante simple y cómoda. Como condimento extra si incorporamos SDL_gfx encontramos con que este ultimo complemento expresa los Colores asi 0xRRGGBBAA (Esta AA es el Alpha), la cual es muy comoda y mas copleta que las anteriores; no obstante hay incompatibilidad entre ellas.
A quien le interese les regalo una pequeña funcion para descomponer un color de SDL_gfx (es decir en formato 0xRRGGBBAA):
Bueno la función mediante un and con una máscara y una división nos devuelve los componentes del color; esta fue la solución más eficiente que se me ocurio. Capaz que a alguien le sirva tambien :)
Otra curiosidad es que con SDL pelado, podemos dibujar rectangulos rellenos pero no asi bordes de rectangulos.
Bueno como dije son curiosidades nada que ver con errores ni nada de ello. Lluego sigo la lista pero por ahora queria nombrar la optimizacion de algunas cosas en el engine y como muestra de ello de nuevo el "hola mundo".
No es la gran cosa pero hace mas transparente el manejo de la escritura de texto.
¡Hasta la proxima!
Bueno la primera impresion que todos tenemos de SDL es sencilla. ¡Wau! Que linda librería portable.
Ahora bien cuando empezamos a ver en detalle vemos algunas durezas y que si bien es una API bastante completa, le falta un poco más para poder ser usada comodamente. Gracias a muchos desarrolladores disponemos de librerías complementarias para ampliar el poder de SDL (SDL_Image, SDL_tff, SDL_gfx, SDL_Mixer) y es por esto que en mi opinion SDL se gana unos buenos puntos.
Para alguien con experiencias incorporar las librerías extras no son mucho trabajo, no obstante si sos (como yo) principiante en este asunto te va a costar un poco.
Bueno como dije esta entrada iba a tratar de las curiosidades de SDL y algunos extras, asi que a eso voy.
La primera que me encontre, no fue mas que por parte de mi ignorancia. Cuando estaba implementando la clase Teclado, pense que el array de teclas sería de un tamaño de 255, pero al probar los metodos de esta clase me di cuenta que algo andaba mal. En si el array tiene 322 elementos que corresponden a distintas teclas del teclado (Si ya se el teclado solo tiene 101 teclas) pero bueno, esto es así para simplificarnos las cosas.
La segunda que me encontre fue la del formato de color. Podemos encontrarnos con dos formatos: SDL_Color, y usando un Uint32 de esta manera 0x00RRGGBB. Bueno no se porque se termino implementando SDL_Color ya que la notacion de un Uint32 es bastante simple y cómoda. Como condimento extra si incorporamos SDL_gfx encontramos con que este ultimo complemento expresa los Colores asi 0xRRGGBBAA (Esta AA es el Alpha), la cual es muy comoda y mas copleta que las anteriores; no obstante hay incompatibilidad entre ellas.
A quien le interese les regalo una pequeña funcion para descomponer un color de SDL_gfx (es decir en formato 0xRRGGBBAA):
void getComponentesRGBA(Uint32 color, int & r, int & g,int & b, int & a)
{
r = (0xFF000000 & color) / 0x01000000;
g = (0x00FF0000 & color) / 0x00010000;
b = (0x0000FF00 & color) / 0x00000100;
a = (0x000000FF & color);
}
Bueno la función mediante un and con una máscara y una división nos devuelve los componentes del color; esta fue la solución más eficiente que se me ocurio. Capaz que a alguien le sirva tambien :)
Otra curiosidad es que con SDL pelado, podemos dibujar rectangulos rellenos pero no asi bordes de rectangulos.
Bueno como dije son curiosidades nada que ver con errores ni nada de ello. Lluego sigo la lista pero por ahora queria nombrar la optimizacion de algunas cosas en el engine y como muestra de ello de nuevo el "hola mundo".
#include
#include "Pantalla.h"
#include "ControlFPS.h"
#include "TrueFont.h"
#include "Teclado.h"
Pantalla * pantalla;
Teclado * teclado;
TrueFont * fuente;
ControlFPS * timer;
int main (int argc, char *argv[])
{
bool termino=false;
int xTexto=0;
/*Se inicializa el subsitema de video y se crea la surface de dibujo, de tamaño 640,480 con
Bufer y superficie por software, mas un modificador extra para las banderas de inicializar
SDL_video en este caso nada extra */
pantalla = new Pantalla(640,480, 0);
teclado = new Teclado(); /* Se crea el objeto teclado */
timer = new ControlFPS(); /* Se crea el objeto que se encargara de controlar los FPS*/
fuente = new TrueFont("fuente.ttf",16); /* Se crea la fuente especificando ruta y tamaño*/
pantalla->setFuente(fuente); // se asigna la fuente a la maquina de escribir de la pantalla.
while (!termino) {
timer->actualizarTimer(); // se toma la medida
teclado->actualizar(); // se lee el estado de las teclas
xTexto+=4; // para mover el texto
if (xTexto>640) {xTexto=0};
/* si se presiona la tecla escape sale del juego. */
if (teclado->isTeclaSePresiona[SDL_ESCAPE] ) { termino = true;};
// limpia la pantalla
pantalla->limpiar(pantalla->NEGRO);
// escribe el texto en pantalla
pantalla->dTexto("¡Hola mundo!",xTexto, 240,pantalla->BLANCO);
// vuelva el buffer en pantalla
pantalla->renderizar();
timer->controlarTiempoMax(30);// hace que el timer haga durar cada
// step comominimo 30
}
};
No es la gran cosa pero hace mas transparente el manejo de la escritura de texto.
¡Hasta la proxima!
4 comentarios:
Linda entrada, una pregunta: Yo soy el unico bolu que usa allegro? xD
No te la esperabas jaja
JaJa no, no me la esperaba.
¡Parece que si! XD Yo hace un tiempo estaba entre SDL y Allegro, pero SDL era más usado y supuse que iba a encontrarme con más documentacion.
Despues vi que monstruos como "World of Goo" y "Crayon Phisics" lo usaban y eso me gusto :p aunque eso realmente no signifique nada.
Un saludo!
Hola! Pasé para chusmear un poco tu blog. Te dejo un comentario respecto a una de las cosas que mencionás en el artículo: para descomponer el color, podés evitarte las divisiones (que suelen ser instrucciones "caras") por operaciones de desplazamiento de bits.
La función te quedaría entonces:
void getComponentesRGBA(Uint32 color, int & r, int & g,int & b, int & a)
{
r = (0xFF000000 & color) >> 24;
g = (0x00FF0000 & color) >> 16;
b = (0x0000FF00 & color) >> 8;
a = (0x000000FF & color);
}
Saludos!
Uh buenísimo!!
Muchisimas gracias por el aporte, voy a investigar un poco en el asunto a ver que otros usos puedo darle en funciones similares.
Un saludo!
Pd: ¿Te conozco verdad?
Publicar un comentario en la entrada