Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Colisión En Sdl

Iniciado por javiel, 21 de Abril de 2004, 12:29:20 PM

« anterior - próximo »

javiel

 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?

uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

seryu

 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?

javiel

 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?
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

Lord Trancos 2

 ¿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.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Thenend

 ¿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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.