Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Control De Colisiones

Iniciado por javiel, 27 de Marzo de 2004, 12:00:17 PM

« anterior - próximo »

javiel

 Bueno, como todos sabéis estoy con un juego de naves  :rolleyes:

La cosa es que quiero empezar a implementar las colisiones entonces tengo una duda. Tengo por ejemplo una nave, que tiene un fondo que lo hago transparente y después un disparo, que tambien tiene un fondo transparente. El problema es que puedo crear una función que me diga si un sprite se encuentra solapado con otro, pero esto haría que la colisión se produjese antes de que el disparo impacte con la nave, lo cual es bastante jodido.

Tengo una solución pero es bastante coñazo de implementa, que es crear diferente SDL_Rect, en cada uno de los sprites que cojan sólo la parte de la nave y del disparo que formen parte del dibujo y no de la zona transparente, pero eso ademas de ser un poco rollo de implementar, cuando gire una nave o tenga sprites donde el dibujo sea oblicuo, lo hace casi imposible.

No se si existe alguna librería para SDL que te ayuda a controlar las colisiones o si tenéis alguna idea para ello

Muchas gracias a todos por vuestra ayuda y por soportarme ;-)
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

AK47

 Saludos
Yo lo que haria seria esto: por ejemplo, tengo mi nave, las naves enemigas y los disparos. Simplemente, rodearia cada objeto con una caja que se ciñiese al mismo, osea, un bounding box. Entonces, para saber si algun disparo mio le ha dado a un enemigo, simplemente compruebo si la caja de algun disparo solapa la de algun enemigo. Si lo solapa, es que han colisionado.
Es cierto que estas cajas no representan perfectamente el sprites, es decir, puede que los pixeles del disparo no se solapen con los de la nave, pero es un metodo suficientemente preciso para dar el cante, que es de lo que se trata.
En cuanto a las rotaciones, pues igual en vez de caja usaria un circulo ;) Yo lo hice asi en mi juego y los resultados fueron excelentes  :)  

javiel

 perdona mi ignorancia, pero q es un bounding box??

No entiendo lo que me dices
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

AK47

 Un bounding box es, como su nombre indica, una caja que limita. En tu caso, seria la caja minima que necesitas para englobar la nave, por ejemplo. Es decir, tu coges tu nave, y teniendo solo en cuenta los pixeles dibujables (NO los transparentes), calculas la caja minima que engloba esos pixeles. Si tu nave fuese un ladrillo XD pues la caja (o bounding box, BB) seria exactamente el tamaño del ladrillo, su altura y longitud.

A ver si te vale ;)

sés

 Mejor define varias cajas para cada gráfico, no creo que con una sea suficiente para muchos de ellos.
Soy indeciso... ¿o no?

Thenend

 Por si te sirve de algo, hace un tiempo hablamos de cómo girar las bounding boxes en  este post

wialco

 Podrías coger el recuadro que queda con el choque entre los dos sprites y mirar si alguno de los píxeles "no transparentes" de esos dos sprites se superponen:

######
######   -->Sprite 1
####////
####////   -->Recuadro donde colisionan
.........##
.........##  ---->Sprite 2

Por ej, coger sólo el recuadro del choque "////" y mirar en los dos sprites si algún pixel no "transparente" choca.






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.