Cómo se le puede indicar a Game maker la colisión en un solo lado del sprite? O por ejemplo que identifique cuando colisiona con uno de los lados de un objeto sin necesidad que sean todos sus lados, sólo uno, por ejemplo su lado izquierdo en un cuadrado.
Sé que Bbox sirve para indicarle uno de los lados del sprite, pero cómo se da cuenta game maker o cual es la función para que se de cuenta de que el personaje o otro sprite ha hecho colisión con ese lado.
//movimientos
if keyboard_check(vk_left) //izquierda wall(pared)
{
if !place_meeting(x - 1, y, obj_wall) x -=4; // x-1 esto es lo que buscas
}
if keyboard_check(vk_right) //derecha wall(pared)
{
if !place_meeting(x + 1, y, obj_wall) x +=4; // x+1 esto es lo que buscas
}
mira este es para los lados
Suerte
pon en el evento step:
if(place_meeting(x+1,y,objeto)){pon aquí lo que pasa} //esto es para la colisión desde la derecha
if(place_meeting(x-1,y,objeto)){pon aquí lo que pasa} //esto es para la colisión desde la izquierda
if(place_meeting(x,y+1,objeto)){pon aquí lo que pasa} //esto es para la colisión desde abajo
if(place_meeting(x,y-1,objeto)){pon aquí lo que pasa} //esto es para la colisión desde arriba
sustituye objeto por el objeto con el que va a colisionar.
Este código mira si el objeto está colisionando con otro objeto en los distintos lados del sprite
Cita de: Maximo en Agosto 01, 2014, 08:40:20 PM
pon en el evento step:
if(place_meeting(x+1,y,objeto)){pon aquí lo que pasa} //esto es para la colisión desde la derecha
if(place_meeting(x-1,y,objeto)){pon aquí lo que pasa} //esto es para la colisión desde la izquierda
if(place_meeting(x,y+1,objeto)){pon aquí lo que pasa} //esto es para la colisión desde abajo
if(place_meeting(x,y-1,objeto)){pon aquí lo que pasa} //esto es para la colisión desde arriba
sustituye objeto por el objeto con el que va a colisionar.
Este código mira si el objeto está colisionando con otro objeto en los distintos lados del sprite
Me da como parones cuando camina. La colisión la realiza bien cuando toca con la zona izquierda pero a la hora de caminar se traba.
x += 6;
if (place_meeting(x+1,y,obj_colparent)){
x-=6;
}
He pensado en la posibilidad de que el problema fuera culpa de usar X pero lo he descartado ya que antes ya lo había probado con variables.
Entre mis funciones favoritas están las de colisión. Para detectar una colisión a la izquierda del jugador, suponiendo que el origen del sprite está centrado y el sprite tiene dimensiones de 32x32 pixeles y suponiendo que se quiere que el jugador detecte colisiones sólo contra instancias enemigas:
[STEP] del jugador
colision_izquierda = collision_rectangle(x-20, y -16, x-16, y + 16, obj_enemigo, true, true) //llamar a la función para revisar colisiones
if (colision_izquierda > 1000)
{
//eventos que ocurren cuando hay colisión
}
El código anterior crea un rectángulo de colisión de 4 pixeles de ancho por 32 de alto a la izquierda del sprite del jugador. Es sólo un ejemplo, probablemente 4 pixeles de ancho sea una zona muy delgada para por ejemplo, detectar una bala, pero eso depende del juego. collision_rectangle permite especificar las dimensiones de la zona de colisión, haciéndola muy útil por ejemplo para juegos donde el daño varía según la zona donde ocurra un impacto
Cita de: penumbra en Agosto 01, 2014, 10:16:55 PM
Entre mis funciones favoritas están las de colisión. Para detectar una colisión a la izquierda del jugador, suponiendo que el origen del sprite está centrado y el sprite tiene dimensiones de 32x32 pixeles y suponiendo que se quiere que el jugador detecte colisiones sólo contra instancias enemigas:
[STEP] del jugador
colision_izquierda = collision_rectangle(x-20, y -16, x-16, y + 16, obj_enemigo, true, true) //llamar a la función para revisar colisiones
if (colision_izquierda > 1000)
{
//eventos que ocurren cuando hay colisión
}
El código anterior crea un rectángulo de colisión de 4 pixeles de ancho por 32 de alto a la izquierda del sprite del jugador. Es sólo un ejemplo, probablemente 4 pixeles de ancho sea una zona muy delgada para por ejemplo, detectar una bala, pero eso depende del juego. collision_rectangle permite especificar las dimensiones de la zona de colisión, haciéndola muy útil por ejemplo para juegos donde el daño varía según la zona donde ocurra un impacto
Sí, muchísimo mejor, sólo he de amueblarlo a lo que yo necesito, 128 de alto y 128 de ancho, aunque el Sprite no necesariamente utiliza las medidas completas, así que voy a ver que puedo hacer. Es necesario poner todas las medidas a mano o hay alguna forma mediante un calculo de sprite_index conseguirlo? Ya que no todos los sprites son iguales.
sprite_xoffset
sprite_yoffset
sprite_width
sprite_height
Le he estado dando mil vueltas a todo esto y al final era más problema de la mascara de colisión que del código... al final hasta la cosa más tonta te puede hacer perder la noción de lo que esta mal o bien..
Bueno en cualquier caso ya esta resuelto, gracias a todos por las contestaciones.