Hola a todos, soy nuevo en esta comunidad y me gustaría hacer la primera pregunta:
¿Cómo puedo detectar colisiones de múltiples instancias pero de un solo objeto?
Estoy haciendo un Arkanoid, y me sucede lo siguiente: estoy tratando de realizar una colisión de la bola con un ladrillo (obj_verde). Para realizar esta colisión he pensado en dividirla en dos partes:
1.- Si la bola está por debajo o por encima de x píxeles desde el centro del ladrillo, sucederá una cosa. Para esto, ¿debería usar place_meeting o instance_place? He probado los dos pero el resultado no cambia.
//Código de la bola
diferencia_alturas = y - obj_verde.y
if (place_meeting(x+hspeed,y+vspeed,obj_verde)){ //obj_verde lo sustituiré por obj_padre en un futuro para realizar todas las colisiones de todos los ladrillos
if ((diferencia_alturas > 8 ) or (diferencia_alturas < -8)){
//Código para que rebote de una forma
}
2.- Si la bola colisiona a la altura del lateral del ladrillo
if ((diferencia_alturas < 8 ) && (diferencia_alturas > -8)){
//Código para que rebote de otra forma
}
}
//Fin
Los rebotes ya los perfeccionaré a mi manera. La pregunta que quería hacer desde el principio es que, al debuguear el número de instancia con el que choca, siempre me muestra el mismo ( 8 ), choque con el que choque no hay manera de que me muestre la instancia con la que colisiona. Siempre me muestra la primera instancia que coloqué en la room. ¿Alguna sugerencia de como solucionar esto? ¿Cómo puedo hacer colisiones para múltiples instancias, y que al debuguear el número de instancia con el que choca no me muestre siempre el mismo?
Un saludo.
place_meeting() e
instance_place() te dan información diferente:
- place_meeting(): Devuelve true si hay colisión, false en caso contrario
- instance_place(): Devuelve la id de la instancia con la que hay colisión, o noone si no hay colisión
De esta forma, el código:
if (place_meeting(x+hspeed,y+vspeed,obj_verde))
es lo mismo que:
if (instance_place(x+hspeed,y+vspeed,obj_verde) != noone)
Si necesitas hacer algo con la instancia contra la que chocas, necesitarás usar
instance_place(), por ejemplo:
var vId = instance_place(x+hspeed, y+vspeed, obj_verde);//Ahora podemos acceder al ladrillo con vId
if (vId != noone){
...
}
Espero que te sirva ;)
Cita de: correojon en Marzo 27, 2016, 04:34:00 PM
place_meeting() e instance_place() te dan información diferente:
- place_meeting(): Devuelve true si hay colisión, false en caso contrario
- instance_place(): Devuelve la id de la instancia con la que hay colisión, o noone si no hay colisión
De esta forma, el código:
if (place_meeting(x+hspeed,y+vspeed,obj_verde))
es lo mismo que:
if (instance_place(x+hspeed,y+vspeed,obj_verde) != noone)
Si necesitas hacer algo con la instancia contra la que chocas, necesitarás usar instance_place(), por ejemplo:
var vId = instance_place(x+hspeed, y+vspeed, obj_verde);//Ahora podemos acceder al ladrillo con vId
if (vId != noone){
...
}
Espero que te sirva ;)
¡Perfecto, justo lo que buscaba!
¡Muchas gracias!
Un saludo :D