Hola a todos,

Hace poco intente resolver el siguiente problema sin obtener ninguna solucion optima,

Tengo dos objetos, obBol y obBlock

Quiero que al tocar obBol el obclock que tenga el mismo valor en la variable num que he creado en su evento este, este objecto obblock se vuelva solido.

En ambos objetos tengo la variable num en CREATE,

Quiero lograr que al tocar el objecto obBol que tenga el mismo valor en la variable num del objecto obBlock el objecto obBlock se vuelva solido..


No se si me hice entender  XD   XD

Gracias pos su atención,
Cordialmente Jodidox!

Puedes hacer algo como esto:
[gml]
//Al presionar el objeto (evento <mouse> o alguna condición)
with (oBlock) { //Revisar todas las instancias de oBlock
    if (num == other.num) //Si el 'num' de oBlock es igual al del oBol
        solid = true; //Marcar como sólido
}
[/gml]
alaberga regué el café.

BA:STFW&RTFM

El player tiene que tocar el boton, en SETP del player tengo lo siguiente:

if place_meeting (x,y,obBol)
{
     with (obBlock)
        {   
             if num == obBol.num
            est = act;
         }
}

el codigo no esta muy simplificado, pero creo que se entiene,

Lo pruebo pero no pasa nada....  :'(
Cordialmente Jodidox!

#3 Abril 23, 2016, 06:54:13 PM Ultima modificación: Abril 23, 2016, 06:59:17 PM por NiuWeb
Según lo que dices, el objeto player no tiene una variable num, sino que ésta se encuentra en el objeto Bol con el que se colisiona.
Por eso es que no sucede nada, porque debes obtener el valor de num del objeto con el que colisionó para comprobar correctamente.
[gml]
var obj = collision_rectangle(x, y, x + 32, y + 32, oBol, false, true);

if obj != noone {
    with (oBlock) {
        if num == obj.num;
            est = act;
    }
}
[/gml]
Hice uso de un collision_rectangle() en el ejemplo. Revisa esta función en el manual para que entiendas mejor.
alaberga regué el café.

BA:STFW&RTFM

Cita de: NiuWeb en Abril 23, 2016, 06:54:13 PM
Según lo que dices, el objeto player no tiene una variable num, sino que ésta se encuentra en el objeto Bol con el que se colisiona.
Por eso es que no sucede nada, porque debes obtener el valor de num del objeto con el que colisionó para comprobar correctamente.
[gml]
var obj = collision_rectangle(x, y, x + 32, y + 32, oBol, false, true);

if obj != noone {
    with (oBlock) {
        if num == obj.num;
            est = act;
    }
}
[/gml]
Hice uso de un collision_rectangle() en el ejemplo. Revisa esta función en el manual para que entiendas mejor.

Lo he hecho y no ocurre nada, obBlock es un objeto padre,

¿Tendrá algo que ver?

Cordialmente Jodidox!

No creo.
Más importante. ¿Estás seguro de que no ocurre nada? Intenta hacer pruebas, reemplaza est = act por otra cosa como un show_message("¡Colisión!") o algo así
alaberga regué el café.

BA:STFW&RTFM

Estaba escribiendo mal el code

:p

Ahora si me reconoce,

Una pregunta ¿Porque place_meeting no me reconoce y collision_rectangle si?

Cordialmente Jodidox!

Porque place_meeting() devuelve un booleano (true o false dependiendo de si hay o no colisión), y collision_rectangle() devuelve la id de la instancia que colisiona. Por ello es posible sacar el valor de num de la instancia identificada con la id que la función devuelve.
alaberga regué el café.

BA:STFW&RTFM

Muchas gracias NiuWeb me quedo clarisimo.  :D
Cordialmente Jodidox!