Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: jodidox en Abril 23, 2016, 03:45:27 AM

Título: SISTEMA DE BOTON
Publicado por: jodidox en Abril 23, 2016, 03:45:27 AM
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,
Título: Re:SISTEMA DE BOTON
Publicado por: bygdle en Abril 23, 2016, 04:22:37 AM
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]
Título: Re:SISTEMA DE BOTON
Publicado por: jodidox en Abril 23, 2016, 06:19:23 PM
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....  :'(
Título: Re:SISTEMA DE BOTON
Publicado por: bygdle 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.
Título: Re:SISTEMA DE BOTON
Publicado por: jodidox en Abril 23, 2016, 07:26:16 PM
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?

Título: Re:SISTEMA DE BOTON
Publicado por: bygdle en Abril 23, 2016, 07:29:25 PM
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í
Título: Re:SISTEMA DE BOTON
Publicado por: jodidox en Abril 23, 2016, 07:37:03 PM
Estaba escribiendo mal el code

:p

Ahora si me reconoce,

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

Título: Re:SISTEMA DE BOTON
Publicado por: bygdle en Abril 23, 2016, 07:40:03 PM
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.
Título: Re:SISTEMA DE BOTON
Publicado por: jodidox en Abril 23, 2016, 07:42:39 PM
Muchas gracias NiuWeb me quedo clarisimo.  :D