Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: javiel en 21 de Abril de 2004, 12:29:20 PM

Título: Colisión En Sdl
Publicado por: javiel en 21 de Abril de 2004, 12:29:20 PM
 Búscando por las librerías de SDL encontré esto:

http://www.angelfire.com/vamp/genjix/sdl_l...b/SDL_Collide.h

Que son unas funciones que te controlan las colisiones. Lo hace mirando todos los pixels que han colisionnado y si ninguno de los dos es el color que se define como transparente en la constante TRANS, pues ha colisionado claramente.

Bueno, mis sprites lo tengo en PNG y ya los archivos van con su transparente puesto. Como el valor que hay que darle a TRANS era un Uint32, cree unas funciones para comprobar cual es el valor Uint32 del color transparente en el PNG y vi que el valor era 0.

Hasta ahí todo bien, pero el problema es que no me funciona del todo bien las colisiones. Cuando disparo algunas veces me las hace bien y otros no. Parece como si según la imagen (su formato supongo o colores) me color transparente del PNG en Uint32 pueda ser además de "0" otros números que dependen de la imagen en concreto por lo que no puedo comprobar los colores y ponerlos.

¿alguien sabe algo sobre esto o como solucionarlo?

Título: Colisión En Sdl
Publicado por: seryu en 21 de Abril de 2004, 04:16:14 PM
 los PNG tienen un canal alpha para la transparencia, lo que permite definir el rango de transparencia de cada pixel, y no limitarlo simplemente a 0/1. Gracias a eso puedes lograr fundidos muy suaves entre imagenes. Supongo que es esto a lo que te refieres, no?
Título: Colisión En Sdl
Publicado por: javiel en 21 de Abril de 2004, 06:37:16 PM
 no te entiendo bien.

Yo tengo un sprite, el cual tiene zonas transparentes. Estoy probando la colision, pero quiero que solo colisione en las partes donde hay zonas pintadas, no en las transparentes, claramente.  No utilizo en ningun momentos grados de opacidas, o es transparente o es un color.

Las funciones estas lo que hacen es eso mismo, tu lo que le pasas es en la constante TRANS un nuevo que equivale al color que quieres que sea transparente y el te dice si ha o no ha colisionado. El color se tiene que pasar en Uint32 y he hecho las pruebas sobre un PNG y he visto que ese número es 0 en las zonas transparentes, pero las colisiones no me las hace bien. Algunas veces si salen perfectamente y otras me provoca la colision cuando le da la gana.

No se si me explico bien, sabes algo sobre eso?
Título: Colisión En Sdl
Publicado por: Lord Trancos 2 en 21 de Abril de 2004, 07:40:24 PM
 ¿Has probado a pintar (mediante codigo) las zonas con valores 0 de algun color visible? (blanco, por ejemplo 0xFFFFFFFF)

Tal vez asi puedas ver que zonas realmente esta considerando como transparentes.
Título: Colisión En Sdl
Publicado por: Thenend en 21 de Abril de 2004, 09:17:19 PM
 ¿Los .png los tienes paletizados (color de 8 bits) o no (16, 24 o 32 bits)?

Si están paletizados tienes que tener en cuenta que aunque pintes el fondo de negro o lo que sea, puede que en una imagen el negro sea el color 0 de la paleta y en otra no lo sea.

Eso lo podrías arreglar por ejemplo con el paint shop pro cargando la paleta de una imagen que te haga bien las colisiones en las demás imágenes. O modificando las paletas una a una para que el fondo siempre esté pintado con el color 0 de la paleta.

No se si ese será tu problema.