Autor
|
Tema: Comprobar colisión de 2 cuadrados en SDL (Leído 4,685 veces)
|
Stereo
Desconectado
Mensajes: 25
|
Hola buenas. El caso es que estoy empezando con SDL, y me ha surgido esa duda, cómo comprobar que 2 cuadrados colisionan si solo tengo la posición y tamaño de cada uno(X, Y). Se me ha ocurrido comprobar cada vértice: Y funciona, pero me parece demasiado code, quería saber si se puede optimizar de alguna forma.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Y funciona, pero me parece demasiado code, quería saber si se puede optimizar de alguna forma.
Como no lo pones, no sé que tal estará de optimizado ese código, pero en sí la cosa es relativamente sencilla.
Los símbolos se corresponden con: sd=superor derecha
si=superior izquierda
ii=inferior izquierda
id=inferior derecha
x e y para el cuadrado rojo
x_c e y_c para el cuadrado negro
Se producirá colisión si:if ((xid>x_csi && yid<y_csi) || (xsd>x_cii && ysd>y_cii) || (xsi<x_cid && ysi>y_cid) || (xii<x_csd && yii<y_csd) )
Saluditos!.
|
|
|
En línea
|
|
|
|
anonimo12121
|
Esa forma esta mal echa porque cuando el cuadro es 10 de alto y el objeto que colision es 8 de alto y esta justo en el centro los vertices del cuadro estan fuera.
Yo usaba unos cuantos bucles y condiciones para comprobar si algun punto del objeto A estaba dentro de B,
|
|
« Última modificación: 23 Febrero 2013, 20:14 pm por Xafi »
|
En línea
|
|
|
|
Stereo
Desconectado
Mensajes: 25
|
Gracias por responder pero ya he encontrado otra forma: bool IsCollision(SDL_Rect &rect1, SDL_Rect &rect2) { if(rect1.x <= rect2.x+rect2.w && rect1.x+rect1.w >= rect2.x && rect1.y <= rect2.y+rect2.h && rect1.y+rect1.h >= rect2.y) return true; return false; } Esa forma esta mal echa porque cuando el cuadro es 10 de alto y el objeto que colision es 8 de alto y esta justo en el centro los vertices del cuadro estan fuera.
Yo usaba unos cuantos bucles y condiciones para comprobar si algun punto del objeto A estaba dentro de B,
Funciona perfecto, siempre cuando el cuadrado que chequeas sea igual o más pequeño que el otro, aun así gracias.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Esa forma esta mal echa porque cuando el cuadro es 10 de alto y el objeto que colisión es 8 de alto y esta justo en el centro los vértices del cuadro están fuera.
No,no está mal, siempre que trabajes con las coordenadas de los vértices de ambos cuadrados. El caso que planteas lo cubre los dos primeros casos del if, ya que antes de "entrar" colisiona. Y partimos que el cuadrado azul está inicialmente fuera.
Además en mí propuesta pueden moverse ambos cuadrados, todo se reduce a la comparación de las coordenadas.
Saluditos!.
|
|
|
En línea
|
|
|
|
anonimo12121
|
puede ser xD no estoy con muchas ganas hoy.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
|
|
|
En línea
|
|
|
|
Anastacio
Desconectado
Mensajes: 111
|
Hola Tenemos dos cuadrados, eso indica 8 variables en SDL. If(((x1 > x2) and (x1 <( x2 +w2)) and (y1 > y2) and (( y1 < (y2 + h2))) { Collision = true; } En castellano: Si x es mayor al punto x del otro cuadrado, pero menor al lado derecho del cuadrado, los cuadrados estan superpuestos. Se puede decir lo mismo de y.
|
|
|
En línea
|
You, stop to close my post, you were novice too!!!!!!!!!!!!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Colision de 2 image [Solucionado]
Programación Visual Basic
|
skapunky
|
8
|
7,819
|
4 Septiembre 2008, 14:52 pm
por cobein
|
|
|
Problema discos duros, colision de firmas
Windows
|
roilivethelife
|
1
|
9,304
|
10 Septiembre 2012, 16:32 pm
por r32
|
|
|
[SFML] Rebote de colisión
« 1 2 »
Programación C/C++
|
DeMoNcRaZy
|
13
|
7,896
|
3 Julio 2015, 17:40 pm
por Maurice_Lupin
|
|
|
Colisión entre objetos JS
Desarrollo Web
|
SrTrp
|
6
|
5,180
|
14 Julio 2017, 02:29 am
por SrTrp
|
|
|
No se capta colisión ¿calculo mal la distancia?
Programación General
|
Tachikomaia
|
1
|
695
|
29 Noviembre 2024, 06:21 am
por Tachikomaia
|
|