Marzo 20, 2016, 10:47:02 PM Ultima modificación: Marzo 20, 2016, 11:48:03 PM por desplo
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.

#1 Marzo 20, 2016, 10:53:37 PM Ultima modificación: Marzo 20, 2016, 10:56:18 PM por NiuWeb
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]
alaberga regué el café.

BA:STFW&RTFM

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

También se puede usar la función instance_place, que necesita menos parámetros.