Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: darius en Septiembre 11, 2013, 10:46:45 PM

Título: Duda sobre detección de colisiones (SOLUCIONADO)
Publicado por: darius en Septiembre 11, 2013, 10:46:45 PM
saludos, makeros  :D
mi duda:

Tiempo atrás, cuando usaba drag&drop, las colisiones las chekeaba con los eventos de colisión. Ahora uso gml, y en muchos códigos me es más conveniente chekear las colisiones con tal objeto desde el código en los eventos step o en los scripts, este es el problema:   :-\
Quiero chekear si este coche colisiona con el círculo:
(http://i961.photobucket.com/albums/ae91/Superdarius/preview_zpse110a2ad.png) (http://s961.photobucket.com/user/Superdarius/media/preview_zpse110a2ad.png.html)

El resultado que quiero es negativo (no colisiona);
-----------------------
Si chekeo con los eventos de colisión, la colisión no se produciría, es decir, se chekea exacto:
(http://i961.photobucket.com/albums/ae91/Superdarius/preciso_zpsa2bd89d9.png) (http://s961.photobucket.com/user/Superdarius/media/preciso_zpsa2bd89d9.png.html)
(donde el rojo es la zona que se chekea)

Si chekeo mediante código puedo usar:
if collision_rectangle(bbox_left,bbox_top,bbox_right,bbox_bottom,obj_bola,1,1)
pero he aquí el problema; el chekeo sería así:
(http://i961.photobucket.com/albums/ae91/Superdarius/rectangle_zpsbf40daea.png) (http://s961.photobucket.com/user/Superdarius/media/rectangle_zpsbf40daea.png.html)
y por tanto daría positivo.

usando collision_circle:
(http://i961.photobucket.com/albums/ae91/Superdarius/circle_zps6404fa2c.png) (http://s961.photobucket.com/user/Superdarius/media/circle_zps6404fa2c.png.html)
también daría positivo....

Creo que se puede chekear con if place_meeting, pero como en vez de pedirte con qué instancia quieres chekear te pide la posición de esa instancia, si en esa posición hay otra instancia se equivocaría... es decir, no es 100% fiable (eso creo)  :-\

Por tanto, ¿hay alguna forma de chekear colisiones 100% precisas?
¿Me he equivocado o engañado en algo?
:P Si pudiesen resolver mis dudas se lo agradecería.
salu2
;)
Título: Re:Duda sobre detección de colisiones
Publicado por: fab62 en Septiembre 12, 2013, 02:52:13 AM
Hola. Los codigos hechos en drag and drop se pueden pasar exactamente a GML. me parece que lo que estas pidiendo es utilizar la funcion place_meeting(x,y,objeto), pero, nose si eso hace que la colision sea precisa, hay un programa que te pasa el drag and drop a GML, lo encontré en las descargas.

http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=157 (http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=157)
Título: Re:Duda sobre detección de colisiones
Publicado por: darius en Septiembre 12, 2013, 03:01:23 PM
en fin, gracias por la respuesta... me tendré que aguantar con el place_meeting...
gracias   :P
Título: Re:Duda sobre detección de colisiones
Publicado por: brunoxzx en Septiembre 12, 2013, 11:06:00 PM
También está instance_place(), que devuelve el ID del objeto con el colisionas  :-[.
Título: Re:Duda sobre detección de colisiones
Publicado por: darius en Septiembre 12, 2013, 11:18:46 PM
 :-[ pues sí, no lo había visto...  :-[
tengo un duda; e el manual pone:
Citar
instance_place(x,y,obj) Returns the id of the instance of type obj met when the current instance is placed at position (x,y). obj can be an object or the keyword all. If it does not exist, the special object noone is returned.

No entiendo para qué sirve entonces el x e y,  :-\ si me lo pudiéseis aclarar, se acabarían definitivamente mis dudas xD
Título: Re:Duda sobre detección de colisiones (aún hay dudas xD)
Publicado por: penumbra en Septiembre 12, 2013, 11:59:30 PM
Cita de: darius en Septiembre 12, 2013, 11:18:46 PM
No entiendo para qué sirve entonces el x e y,  :-\ si me lo pudiéseis aclarar, se acabarían definitivamente mis dudas xD

x e y sirven para probar si hay una colisión en ese punto.  La instrucción se usa para saber si hay una colisión no con cualquier objeto, sino con un objeto especifico en un punto específico

Imagina que desde un objeto obj_A haces esto;
instance_place(100, 100, obj_B)

Lo que hace GM cuando ejecuta la instrucción es mover la instancia del objeto A al punto especificado (100, 100),  revisar si hay colisión contra el objeto B (tomando en cuenta la máscara de colisión del objeto A), regresar al objeto A a su posición original y avisar si hubo colisión o no. Si hubo colisión, regresa la id de la instancia del objeto B
Título: Re:Duda sobre detección de colisiones (aún hay dudas xD)
Publicado por: brunoxzx en Septiembre 13, 2013, 08:40:16 AM
Cita de: penumbra en Septiembre 12, 2013, 11:59:30 PM
Lo que hace GM cuando ejecuta la instrucción es mover la instancia del objeto A al punto especificado (100, 100),  revisar si hay colisión contra el objeto B (tomando en cuenta la máscara de colisión del objeto A), regresar al objeto A a su posición original y avisar si hubo colisión o no. Si hubo colisión, regresa la id de la instancia del objeto B

Exactamente  ;).
Título: Re:Duda sobre detección de colisiones (aún hay dudas xD)
Publicado por: darius en Septiembre 22, 2013, 08:24:33 PM
ok, ya lo entiendo perfectisimamente, perdón por responder tarde xD...  :-[
tema cerrado  :P