Estoy intentando hacer colisiones con esta función, pero entre una y otras pruebas me entraron un montón de dudas.
Al usar el collision_rectangle, se que me hace un rectángulo, que si otro objeto(especificado por parámetro) entra en esa área, me detectara una colisión. Pero el place_meeting, que hace exactamente, me hace un punto de colisión, una linea? o que es lo que hace? Esa es mi duda ???
Estuve viendo la documentación de esta función, pero no logro entenderla del todo y ademas no especifica si algún tipo de linea o algo.
Estoy muy confundido ???
http://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/index.html
los place son para colisiones simples, y las otras para avanzadas, tienes mas variables.
Mirate esa guía.
Para las colisiones toma en cuenta la mascara de colision del sprite
Así es, detecta si dos máscaras de colisión se empalman. Una máscara es de la instancia que llama a la función y la otra es la del objeto que se pone como argumento. Las máscaras de colisión se definen en los sprites. Si los sprites tienen colisiones precisas desactivadas, la función comprueba una colisión entre dos rectángulos, en caso contrario los sprites se recorren pixel por pixel hasta encontrar un empalme.
Muchas gracias a todos voy entiendo, pero se me han generado mas dudas XD
Si pongo este código:
place_meeting(x,y,obj_enemigo);
Solo me tendrá en cuenta la mascara de colisión del sprite, cierto?
Y si pongo esto:
place_meeting(x-1,y,obj_enemigo);
Ademas de tener en cuenta la mascara de colisión del sprite, me tendría en cuenta 1 pixel mas para la izquierda? o como seria esto?
Y si quisiera tener en cuenta 1 pixel mas, pero para la derecha, ¿Debería hacerlo así?
Suponiendo que mi sprite es de 32x32 y su origen esta en x=0, y=0:
place_meeting(x+33,y,obj-enemigo);
o asi?
place_meeting(x+1,y,obj-enemigo);
¿Aquí entraría en juego el origen del sprite cierto, o nada que ver lo que digo? ???
Por lo que yo entiendo, estamos modificando la mascara de colisión del sprite no?, corrijanme si me equivoco ???
Me confunde esto de las colisiones :'(
Cita de: PabloPbl en Septiembre 24, 2015, 08:34:19 PM
Si pongo este código:
place_meeting(x,y,obj_enemigo);
Solo me tendrá en cuenta la mascara de colisión del sprite, cierto?
CUando se trata de colisiones, siempre están involucradas dos máscaras de colisión. En este caso una máscara es la de la instancia que llama la función y la otra es la del objeto obj_enemigo.
Cita de: PabloPbl en Septiembre 24, 2015, 08:34:19 PM
Y si pongo esto:
place_meeting(x-1,y,obj_enemigo);
Ademas de tener en cuenta la mascara de colisión del sprite, me tendría en cuenta 1 pixel mas para la izquierda? o como seria esto?
No.
Cita de: PabloPbl en Septiembre 24, 2015, 04:26:38 PM
Al usar el collision_rectangle, se que me hace un rectángulo, que si otro objeto(especificado por parámetro) entra en esa área, me detectara una colisión. Pero el place_meeting, que hace exactamente, me hace un punto de colisión, una linea? o que es lo que hace? Esa es mi duda ???
Place meeting no trabaja como las funciones
collision_().
place_meeting() o
place_free() mueven la instancia que llama a la función y luego evaluan una colisión en el punto al que se han movido. En tu caso:
place_meeting(x-1,y,obj_enemigo);
La instancia que llama a la función place_meeting se va a mover un pixel a la izquierda, y va a revisar si en esta nueva posición hay una colisión (o traslape de máscaras) entre ella y una instancia del objeto enemigo. Después de evaluar la colisión, la instancia que se movió regresa a la posición que ocupaba antes de llamar a la función place_meeting
place_meeting(x+33,y,obj-enemigo);
Esto hará que la instancia local (la que llama a la función) se mueva 33 pixeles a su derecha y pruebe si en ese punto hay colisión con el objeto enemigo, informa si hay o no colisión y luego regresa a su posición anterior.
En ningún caso se está modificando la máscara de colisión: Sumarle o restarle un escalar a las coordenadas x/y mueve la instancia, pero su máscara se mantiene igual. Y sí, el origen de los sprites se tiene en cuenta siempre. El origen del sprite coincidirá siempre con x/y del objeto.
Muchísimas gracias, me ha quedado clarisimo todo :D :D :D