Instalacion de librerias, en especial sdl_ttf

Preguntas sobre cómo instalar bibliotecas, herramientas como entornos de programación e incluso sistemas operativos como GNU-Linux.

Instalacion de librerias, en especial sdl_ttf

Notapor Balium » Mié Jun 10, 2009 5:36 am

Hola!

Soy nuevo en esta comunidad. Veo que son muy solidarios, me gustaria poder aportar mi granito de arena luego. (Tengo Windows)Estoy empezando a programar con devcpp + SDL.

¿Cual es mi problema? Me vuelvo loco para instalar librerias. Para algunos es muy facil, la tienen muy clara, yo no tengo ni jota de idea de lo que tengo que hacer, en la facultad me enseñaron a hacer #includes y a generar proyectos pero no mucho mas de eso.

En especifico, voy a
http://www.libsdl.org/projects/SDL_ttf/

Me encuentro con la carpeta: Source y Binary. El Binary son las DLL, ahora el Source es el codigo fuente... pero de que? No deberian ser solamente los .H y los .LIB los que tendria que instalar ??? De todas formas me bajo el

Despues siempre veo archivos asi:

SDL_ttf-2.0.9.tar.gz
SDL_ttf-2.0.9-1.src.rpm
SDL_ttf-2.0.9.zip
SDL_ttf-2.0.9.sea.bin

Cual de todos me tendria que bajar ??? En fin hice loteria y me baje el zip ...

Me encuentro con esto:

Imagen

Ahi es cuando empiezo a maldecir a la madre de Sam Latinga ...

Veo el Readme:

Código: Seleccionar todo
This library is a wrapper around the excellent FreeType 2.0 library,
available at:
   http://www.freetype.org/

This library allows you to use TrueType fonts to render text in SDL
applications.

To make the library, first install the FreeType library, then type
'./configure' then 'make' to build the SDL truetype library and the
showfont and glfont example applications.


Claaaro, para el estara muy claro pero yo no entiendo absolutamente nada. En fin, tampoco soy tan boludo asi que fui a instalar la FreeType library, la cual bajo de su pagina oficial (otra vez no se cual de todos estos bajar)

freetype-2.3.9.tar.bz2 1363190 Any
freetype-2.3.9.tar.bz2.sig 189 Platform-Independent
freetype-2.3.9.tar.gz 1809558 Any
freetype-2.3.9.tar.gz.sig 189 Platform-Independent
ft239.zip 2218669 Any
ft239.zip.sig 189 Platform-Independent

Y bajo el zip nuevamente ...

Y me encuentro con esto:

Imagen

Osea que lo tengo que armar un nuevo proyecto con los scr y los .h como si fuera un proyecto nuevo???
Me quiero sacar la duda de una buena vez por todas de que quiere decir cada cosa. Cada vez que tengo que incluir una libreria es un parto de monos del juego monkey island 5...

Les juro por dios que no preguntaria si no fuera porque e googleado e incluso e buscado en este foro (hay un tema similar) pero yo directamente no entiendo nada.

¿Que quiere decir hacer .configre ????
¿Alguien me podria explicar como incluir SDL_TTF paso a paso? Si me explican una vez, ya voy a aprender para siempre y no voy a joder mas.

Despues... que es eso de las lineas de inclusion del compilador y el linker en devcpp...

Me vuelvo loco XD

Por cierto, tengo una duda "yapa" la cual es: ¿En sdl existen los campos de texto, labels,etc?

Saludos :) !
Buscamos dibujante para proyecto importante =) !
Balium
 
Mensajes: 4
Registrado: Mié Jun 10, 2009 5:18 am

Notapor Geo » Mié Jun 10, 2009 7:05 am

No tengo Dev-C++ a la mano en este momento y por eso no puedo darte todos los detalles, pero ya he trabajado con dicho IDe y te puedo comentar lo siguiente:

Te has bajado el código fuente de las bibliotecas, si tu intención es compilarlas tú mismo, adelante, pero normalmente lo más sencillo es descargar la versión ya compilada (binaria). En la primer página (la de SDL_ttf), busca la sección "Binary", ahí descarga la opción "devel" para Windows: SDL_ttf-devel-2.0.9-VC8.zip

El archivo contiene las carpetas "include" y "lib", lo que está dentro de "include" es el archivo de cabecera que deberás incluir cuando pretendas hacer uso de la biblioteca, mientras que dentro de "lib" encontrarás SDL_ttf.lib, el archivo con el que debes enlazar, el resto son archivos DLL necesarios para ejecutar los programas que usen SDL_ttf. Puedes colocarlos en la misma carpeta que tu ejecutable o, copiarlos a la carpeta System32 dentro de tu instalación de Windows.

Para indicar al programa que enlace con SDL_ttf.lib, en las opciones de Dev-C++, busca la opción del enlazador (linker) y agrega dicho archivo, puedes agregarlo con toda su ruta o nadamás poniendo el nombre del archivo si antes en las opciones de Dev-C++ has agregado la carpeta en la que se encuentra SDL_ttf a los directorios de bibliotecas.

Ahora, el procedimiento de instalación de SDL_ttf es prácticamente idéntico al de las otras bibliotecas "complementarias" de SDL, y en la web ya existe un artículo sobre esto:

Cómo instalar Dev-C++ y SDL en Windows

Seguro te será de utilidad.

Sobre tu otra pregunta, no, no existen componentes GUI integrados en SDL, aunque hay bibliotecas GUI que implementan componentes como los que mencionas para SDL, haz una búsqueda en http://www.libsdl.org/libraries.php
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor Balium » Mié Jun 10, 2009 1:47 pm

Jaja muchas gracias, no puedo creer que estaba haciendo las cosas tan complicadas !
Pense que VC8 era Visual Studio 2008 XD. Segui los procedimientos y todo bien, solo que no entiendo esto:porque agregamos lineas a las lineas del comando del compilador:

Código: Seleccionar todo
-I"<INCLUDE>\SDL" -Dmain=SDL_main


No entiendo, si yo incluyo SDL_main.h desde el codigo no deberia incluirlo de una sin tener que hacer eso?

Y en el enlazador:

Código: Seleccionar todo
-lmingw32 -lSDLmain -lSDL_ttf
-lmingw32 -lSDLmain -lSDL


Eso si lo entiendo ya que las librerias no se incluyen via codigo ...

Despues otro problema que tenia es que habia puesto

Código: Seleccionar todo
int main() {
}


en vez de

Código: Seleccionar todo
int main(int argc, char *argv[]){
}


Alguien me puede explicar cual es la diferencia?
Buscamos dibujante para proyecto importante =) !
Balium
 
Mensajes: 4
Registrado: Mié Jun 10, 2009 5:18 am

Notapor Geo » Jue Jun 11, 2009 3:31 am

Balium escribió:porque agregamos lineas a las lineas del comando del compilador:

Código: Seleccionar todo
-I"<INCLUDE>\SDL" -Dmain=SDL_main


La primera instrucción indica qué directorio incluir en la búsqueda de archivos de cabecera, si has configurado correctamente los directorios de bibliotecas en Dev-C++, no es necesaria.
Lo que hace la instrucción es indicar que se haga uso de la definición de SDL para la función main. No es necesaria si en las librerías enlazas con SDLmain.lib

Balium escribió:No entiendo, si yo incluyo SDL_main.h desde el codigo no deberia incluirlo de una sin tener que hacer eso?

Si has configurado correctamente los directorios en Dev-C++, lo hace. De hecho, el entorno/IDE que utilices, pasa ese comando al momento de compilar, basado en los directorios que has configurado.

Balium escribió:Despues otro problema que tenia es que habia puesto

Código: Seleccionar todo
int main() {
}


en vez de

Código: Seleccionar todo
int main(int argc, char *argv[]){
}


Alguien me puede explicar cual es la diferencia?

El detalle es que SDL define un prototipo para la función main(), que corresponde a la segunda opción, que para muchos es conocida pues a menudo es utilizada cuando quieres que el programa reciba algún parámetro desde línea de comandos.
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor Balium » Jue Jun 11, 2009 11:46 am

Muchas gracias, estoy progresando.

En este momento tengo esta pregunta:

¿Cual creen que es el mejor formato de una imagen para un videojuego equlibrando entre calidad y tamaño? ¿PNG no?

¿Me podrian pasar un simple ejemplo de un Loop que no termine hasta que el usuario toque la tecla ESC? porque probe ya de dos formas con SDL_PollEvent y SDL_PumpEvents y no me funciono, o se colgo el programa.
Buscamos dibujante para proyecto importante =) !
Balium
 
Mensajes: 4
Registrado: Mié Jun 10, 2009 5:18 am

Notapor lacabra25 » Vie Jun 12, 2009 11:32 am

Balium escribió:¿Cual creen que es el mejor formato de una imagen para un videojuego equlibrando entre calidad y tamaño? ¿PNG no?


Efectivamente, PNG, con este formato puedes usar el color real RGB ademas de el canal alfa si lo necesitases (RGBA) y la compresion de este formato es sin perdidas, por ejemplo si lo hicieses con JPEG al ser compresion con perdidas los pixeles de la imagen no serian exactamente iguales a los dibujados en la imagen antes de guardarla con lo que no podrias usar el colorkey de SDL y ademas que no soporta transparencias, el GIf es indexado con lo que solo puedes manejar 256 colores como maximo (aparte que si no se ha agotado ya la patente, que no se si habra acabado la patente de GIF, no es un formato libre, aunque lo mismo otros pueden decirte mejor sobre la patente de GIF) de todos modos el GIF no te lo aconsejo ya de entrada y el JPEG tampoco, te queda BMP que no soporta transparencias (este creo que no tiene patentes, pero otros podran aclarar esto mejor que yo) y PNG que como ya te dije soporta el color real y el alfa (32 bits de profundidad) y los archivos no son pesados, suelen ser bastantes ligeros y son los que, por ejemplo, yo mismo uso para cualquier programa que hago y los que se usan para la programacion de videojuegos.

Balium escribió:¿Me podrian pasar un simple ejemplo de un Loop que no termine hasta que el usuario toque la tecla ESC? porque probe ya de dos formas con SDL_PollEvent y SDL_PumpEvents y no me funciono, o se colgo el programa.


A continuacion te dejo el bucle de ejecucion del primer juego que hice yo con SDL que comprueba eventos de teclado, de raton y del sistema y sale del bucle o ejecuta las funciones del juego adecuadas dependiendo del evento, espero que te sirva para ver como manejar los eventos con SDL, el programa lo puse bajo la licencia GPL (GNU General Public License) por lo que puedes usarlo para cualquier fin, copiarlo y redistribuirlo, modificarlo y redistribuirlo modificado; por lo que puedes trastear con las partes que quieras del codigo:

Código: Seleccionar todo
/*bucle de juego*/

while(e == 1 || e == 2){

/*Comprobando que la pantalla sea diferente para mostrar el menu*/

if(e == 1){

/*mostrando el menu en pantalla*/

SDL_BlitSurface(menu, NULL, pantalla, &destino);

/* actualizando la pantalla*/

if(SDL_Flip(pantalla) == -1){

SDL_UpdateRect(pantalla, 0, 0, pantalla->w, pantalla->h);

}

e= 2;

}
/*comprobando eventos*/

if(SDL_PollEvent(&evento) == 1){

/*comprobando los eventos de teclado*/

if( evento.type == SDL_KEYDOWN ){

/*  comprobando cual es la tecla pulsada para realizar la accion asociada*/

switch(evento.key.keysym.sym){

case SDLK_1: e=1;

if(partida_oj(&jo, &j1o) == 10) e=0;

break;

case SDLK_KP1: e=1;

if(partida_oj(&jo, &j1o) == 10) e=0;

break;

case SDLK_2: e=1;

if(partida_jj(&j1, &j2) == 10) e=0;

break;

case SDLK_KP2: e=1;

if(partida_jj(&j1, &j2) == 10) e=0;

break;

case SDLK_3: e=0;

break;

case SDLK_KP3: e=0;

break;

/*Pulsando F5 se muestra informacion sobre el programa como autor, version, web...*/

case SDLK_F5: mostrar_datos_programa();

e=1;

break;

default: break;

}

}

/*comprobando los eventos de raton*/

if(evento.type == SDL_MOUSEBUTTONDOWN){

if(evento.button.button == SDL_BUTTON_LEFT){

/*comprobando si la pulsacion se ha producido en la primera opcion*/

if(evento.button.x >= 48 && evento.button.y >= 124 && evento.button.x <= 108 && evento.button.y <185>= 48 && evento.button.y >= 240 && evento.button.x <= 108 && evento.button.y <304>= 40 && evento.button.y >= 357 && evento.button.x <= 105 && evento.button.y <430>w, pantalla->h);

}

}

}

/*fin de la comprobacion de eventos*/

/*Deteniendo la ejecucion del bucle unos milisegundos para que la CPU pueda atender a otros procesos y programas*/

SDL_Delay(5);

}

/*Fin del bucle de juego*/


Disculpa el tema de que no quite del bucle todo lo que no tenga que ver con eventos del teclado y que no le de la identacion que creo que ha perdido al hacer un copia y pega, pero ahora no tengo tiempo de ello, si más tarde tengo tiempo ya me paso y edito el mensaje. Basicamente de lo que se trata es de detectar la pulsacion de la tecla que quieras y ejecutar en consecuencia unas instrucciones u otras mediante bifurcaciones. Un error que puede que tengas (a mi me ocurrio al principio) es que en lugar de acceder a la estructura para ver que tecla ha sido pulsada mediante evento.key.keysym.sym lo intentes hacer mediante evento.keysym.sym con lo que el programa falla, de todos modos puedes usar el debbuger (GDB por ejemplo, es el que yo uso, se puede usar con la interfaz grafica DDD aunque a mi me gusta mas usarlo desde la terminal, me es más comodo) lo cual te puede ayudar bastante a encontrar los errores del programa y asi solucionarlos antes, a veces puedes pegarte horas o dias intentando resolver el problema por donde crees que esta y con el debbuger ves que resulta que el error estaba en la linea que menos te esperabas y te hubieras ahorrado mucho tiempo usando el debbuger desde un principio, el profiler tambien es una buena herramienta que es bueno conocer.

Esto es todo en cuanto a tus preguntas, solo ya de forma más personal me gustaria recomendarte que pensases en migrar de windows a otro sistema, a un sistema que sea libre como alguna distribucion de GNU/Linux o a alguna de las nuevas distribuciones que estan surgiendo ultimamente de GNU/Hurd (por el momento te aconsejo GNU/Linux ya que GNU/Hurd aun esta en desarrollo), te parecera una tonteria pero ademas de ganar en libertad es mucho mas comodo programar en GNU/Linux que en windows, y si te gusta trabajar desde la terminal incluso mucho mas rapido y comodo.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor Balium » Mié Jun 17, 2009 5:40 pm

Muchas gracias Cabra me sirve de mucho 8)
Buscamos dibujante para proyecto importante =) !
Balium
 
Mensajes: 4
Registrado: Mié Jun 10, 2009 5:18 am


Volver a Instalación de bibliotecas y herramientas

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado