FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Detectar colision
Bueno mi problema es ese como detectar una colision les explico tengo en mi forma un boton que donde doy click con el raton el boton se mueve el problema es como hacer para que se detenga cuando encuentre a otro boton este es el codigo que tengo hasta ahora
/Left if(X>Button1->Left) { for(int x=Button1->Left; x<=X;x++) { Button1->Left=x; } } else { for(int x=Button1->Left; x>=X;x--) { Button1->Left=x; } } //Top if(Y>Button1->Top) { for(int x=Button1->Top; x<=Y;x++) { Button1->Top=x; } } else { for(int x=Button1->Top; x>=Y;x--) { Button1->Top=x; } } habia pensado con un if if(Button1->left+90==Button2->left && Button1->Top+90==Button2->Top) x=X; pero no respeta alguna sugerencia. |
#2
|
||||
|
||||
Talvez te ayuda deberias de crear una funcion que verificara en todos los componentes existentes en el form para verificar esa "colision"
la forma cuenta con una propiedad Components que incluye todos los componentes de la misma.
|
#3
|
||||
|
||||
Una posible rtuina de colisiones podría ser algo así:
Está en Delphi y usa TShapes, pero es fácil de entender y creo que puedes pasarla a Builder y cambiar los TShape por TButton sin grandes problemas.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 30-12-2008 a las 10:32:34. |
#4
|
||||
|
||||
Te pongo el ejemplo completo, he retocado algunas cosas y es casi lo que necesitas.
Un saludo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Bueno gracias por ayudarme pero aun no logro hacerlo el ejemplo que me dejastes no logro bajarlo me aparece una pagina de php, podrias poner el codigo, he intentado con lo que dejastes y funciona a veces y otras se cicla te dejo el codigo que llevo:
Result=false; if(X>Button1->Left) { Button1->Left+=10; } if(X<Button1->Left) { Button1->Left-=10; } //Left if(X>Button1->Left) { for(int x=Button1->Left; x<=X;x++) { Button1->Left=x; colision(); if (Result==true) { x=X; } } } else { for(int x=Button1->Left; x>=X;x--) { Button1->Left=x; colision(); if (Result==true) { x=X; } } } if( Result!=true) { //Top if(Y>Button1->Top) { for(int x=Button1->Top; x<=Y;x++) { Button1->Top=x; colision(); if (Result==true) { x=X; } } } else { for(int x=Button1->Top; x>=Y;x--) { Button1->Top=x; colision(); if (Result==true) { x=X; } } } } } //--------------------------------------------------------------------------- void TForm1::colision() { int r1, r2, b1, b2; r1=(Button1->Left + Button1->Width); r2= (Button2->Left + Button2->Width); b1= (Button1->Top + Button1->Height); b2=(Button2->Top + Button2->Height); if (((Button1->Left < Button2->Left) && (r1 > Button2->Left)) && ((Button1->Top < Button2->Top) && (b1 > Button2->Top)) ||((Button2->Left < Button1->Left) && (r2 > Button1->Left)) &&((Button2->Top < Button1->Top) &&(b2 > Button1->Top)) ||((Button1->Left < Button2->Left) &&(r1 > Button2->Left)) &&((Button2->Top < Button1->Top) &&(b2 > Button1->Top)) ||((Button2->Left< Button1->Left) &&(r2 > Button1->Left)) && (( Button1->Top < Button2->Top) &&(b1 > Button2->Top))) { Result=true; } } //--------------------------------------------------------------------------- tiene un problema que estoy resolviendo ya que cuando te acercas al otro boton se para, pero ya no se mueve porque la condicion se cumple ya que estan cerca por eso en la funcion de mouse down le incremento 10 para que se aleje cada que se da un click. espero me puedas dar una mano |
#6
|
||||
|
||||
Lo he subido al FTP del club; Prueba a descargarlo de allí. Seccion Ejemplos de Win-32.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
|||
|
|||
Gracias por tu pronta respuesta es mas o menos lo que queria hacer pero esta en delphi, me va a costar un poco pasarlo a builder pero bueno gracias
|
#8
|
||||
|
||||
Ves probando a traducir por trozos, si te atascas en alguno seguro que aquí en los foros hay quien te da una mano, que hay gente que domina ambos lenguajes... De todas formas son instrucciones sencillas, así que no te debería costar entenderlas.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#9
|
|||
|
|||
Ya pude solo que me volvi a atorar, la pregunta es como continuar despues de la colision,mas detalladamente, la colision ocurre cuando el boton baja choca contra el otro es decir la colision ocurre por arriba, entonces el boton se puede mover a los lados pero no hacia abajo como hago esto, alguna idea.
|
#10
|
||||
|
||||
Supongo que dependiendo de la posición del impacto deberas cambiar la dirección de uno o varios objetos.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Detectar llamadas | pollo_c | Varios | 4 | 05-02-2007 11:14:21 |
Colision registros | Bluechip | Conexión con bases de datos | 3 | 27-11-2006 07:54:03 |
Detectar IP | Carliviris | Varios | 3 | 17-04-2006 19:18:26 |
Detectar procesador | Mic82 | Varios | 1 | 12-11-2004 09:45:35 |
Detectar Hora AM-PM | AGAG4 | Varios | 4 | 22-10-2004 20:34:18 |
|