Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: desplo en Marzo 20, 2016, 10:47:02 PM

Título: [RESUELTO]Problema al utilizar "place_meeting"
Publicado por: desplo en Marzo 20, 2016, 10:47:02 PM
Tengo lo siguiente:

if place_meeting(x,y,obj_villano){

atacar = true

with (other) {
animacion=true
x-=10;
}
    }


la idea es modificar la variable animacion y moverlo hacia atras con x-=10.

Pero todo lo que esta adentro del with, no funciona.
Título: Re:Problema al utilizar "place_meeting"
Publicado por: bygdle en Marzo 20, 2016, 10:53:37 PM
La constante other sólo funciona en eventos de colisión y dentro de un with de adentro hacia afuera. Esto quiere decir que funciona dentro de un with así:
[gml]
pepito = "perez"
with (objeto_pepito)
{
show_message("Mi apellido es " + other.pepito);
}
[/gml]
Como puedes apreciar, dentro del with se tomará other.pepito como la variable pepito del objeto que ha "invocado" ese with.

Volviendo al tema, y tomando en cuenta lo dicho anteriormente, la constante other no funciona de la forma en la que la has puesto, ya que no está dentro de un evento de colisión o un with que la invoque, por lo tanto, es inútil.
Para solucionar esto, deberías, en vez de usar un place_meeting(), que sólo devuelve un booleano, usar un collision_rectangle(), que sí devuelve la id del objeto que colisiona.
[gml]
objeto = collision_rectangle(x, y, x+32, y+32, objeto_pepito, false, true);
if objeto != noone
{
atacar = true
with (objeto){
animacion=true
x-=10
}
}
[/gml]
Título: Re:Problema al utilizar "place_meeting"
Publicado por: desplo en Marzo 20, 2016, 11:47:32 PM
Cita de: NiuWeb en Marzo 20, 2016, 10:53:37 PM
La constante other sólo funciona en eventos de colisión y dentro de un with de adentro hacia afuera. Esto quiere decir que funciona dentro de un with así:
[gml]
pepito = "perez"
with (objeto_pepito)
{
show_message("Mi apellido es " + other.pepito);
}
[/gml]
Como puedes apreciar, dentro del with se tomará other.pepito como la variable pepito del objeto que ha "invocado" ese with.

Volviendo al tema, y tomando en cuenta lo dicho anteriormente, la constante other no funciona de la forma en la que la has puesto, ya que no está dentro de un evento de colisión o un with que la invoque, por lo tanto, es inútil.
Para solucionar esto, deberías, en vez de usar un place_meeting(), que sólo devuelve un booleano, usar un collision_rectangle(), que sí devuelve la id del objeto que colisiona.
[gml]
objeto = collision_rectangle(x, y, x+32, y+32, objeto_pepito, false, true);
if objeto != noone
{
atacar = true
with (objeto){
animacion=true
x-=10
}
}
[/gml]

Gracias por la ayuda. Me funciono perfecto  :D :D
Título: Re:[RESUELTO]Problema al utilizar "place_meeting"
Publicado por: Clamud en Marzo 21, 2016, 02:34:02 PM
También se puede usar la función instance_place, que necesita menos parámetros.