Bueno estoy probando 2 nuevas funciones que he visto y no he usado bien en el manual de  :GMS:.

¿Se supone que se entienden así estas funciones?

instance_activate_object() //activa el objeto
instance_deactivate_object() //desactiva el objeto

NOTA: Pueden copiar y pegar este código para ver su funcionamiento sin la necesidad de escribirlo.

por ejemplo la "room" tiene el objeto "obj_Modo_Linterna" (persistente sin sprite)
[gml]
CREATE//////////////////////////////////////////////////////////////////////////////
///Crear la superficie

superficie = surface_create(room_width, room_height);

surface_set_target(superficie);
draw_clear_alpha(c_black, 0);

//Reinicia la superficie
surface_reset_target();
[/gml]
[gml]
STEP/////////////////////////////////////////////////////////////////
///Control de la oscuridad
if (surface_exists(superficie)){
    surface_set_target(superficie);
   
    //conjunto oscuridad
    draw_set_colour(c_black);
    draw_set_alpha(0.9); //intencidad de la oscuridad 0 nada 1 absoluta
    draw_rectangle(0, 0, room_width, room_height, false);
   
    //conjunto circulos
    draw_set_blend_mode(bm_subtract);
   
   
    draw_set_colour(c_black);
    draw_set_alpha(0.2);
   
   
    // dibuja circulos
    with (objJugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 120 + random_range(-1, 1), false);
       
        }
       
        draw_set_colour(c_white);
        draw_set_alpha(1);
       
        with (objJugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 80 + random_range(-1, 1), false);
       
        }
       
       
       
    //Reinicia todo el conjunto dibujo
    draw_set_blend_mode(bm_normal);
    draw_set_alpha(1);
    surface_reset_target();
} else {
    superficie = surface_create(room_width, room_height);
    surface_set_target(superficie);
    draw_clear_alpha(c_black, 0);
    surface_reset_target();
}
[/gml]

[gml]
ROOM_END//////////////////////////////////////////////////////
/// destruir la superficie
if (surface_exists(superficie)) {
    surface_free(superficie);
}
[/gml]

[gml]
DRAW////////////////////////////////////////////////////
///Dibuja la superficie
if (!surface_exists(superficie)) {
    superficie = surface_create(room_width, room_height);
} else {
    if (view_current == 0) {
        draw_surface(superficie, 0, 0);
    }
}
[/gml]

¿Como puedo hacer que se desactive cuando la "room" se llama "X" nombre y se active cuando "X" nombre tiene la "room"? no quiero destruirlo ni quitarle lo persistente, simplemente que deje de funcionar en "X" lugar.

Por ejemplo

rom_Zona_Nexo (activo)
rom_jefe_Espectador (activo)
rom_jefe_Cazador (activo)
rom_Zona_Espectador (desactivo)
rom_Zona_Cazador (desactivo)

[gml]
if (room = rom_Zona_Nexo) or (room = rom_jefe_Espectador) or (room = rom_jefe_Cazador) {
    ///Activar
}
[/gml]

Cita de: desplo en Noviembre 04, 2017, 08:17:15 PM
[gml]
if (room = rom_Zona_Nexo) or (room = rom_jefe_Espectador) or (room = rom_jefe_Cazador) {
    ///Activar
}
[/gml]
Entiendo que me dices que si la room son todas las mencionas, debe activar el objeto, por lo que he hecho algo como esto.

if (room = rom_Zona_Nexo) or (room = rom_jefe_Espectador) or (room = rom_jefe_Cazador) {
    instance_activate_object (obj_Modo_Linterna)
}

if (room = rom_Nivel_Espectador) or (room = rom_Nivel_Cazador){
    instance_deactivate_object(obj_Cuarto_Rotacion)
}

No me funciona.

Aunque quiero aclarar que este objeto no esta en ninguna "room", ya que asumo que al activarlo lo creo y destruyo.

Ni siquiera vea la diferencia entre instance_destroy() y instance_deactivate_object(), ya que ambos dejan al objeto sin uso.

Cita de: Naitsabes0 en Noviembre 05, 2017, 12:23:16 AM
Cita de: desplo en Noviembre 04, 2017, 08:17:15 PM
Aunque quiero aclarar que este objeto no esta en ninguna "room", ya que asumo que al activarlo lo creo y destruyo.

Ni siquiera vea la diferencia entre instance_destroy() y instance_deactivate_object(), ya que ambos dejan al objeto sin uso.

El objeto tiene que estar en la room para poder funcionar.

La diferentes en es que instance_destroy(), elimina el objeto definitivamente y instance_desactivate_object() solamente desactiva los eventos de dicho objeto pero aun sigue existiendo.

Cita de: desplo en Noviembre 05, 2017, 01:33:06 AM
Cita de: Naitsabes0 en Noviembre 05, 2017, 12:23:16 AM
Cita de: desplo en Noviembre 04, 2017, 08:17:15 PM
Aunque quiero aclarar que este objeto no esta en ninguna "room", ya que asumo que al activarlo lo creo y destruyo.

Ni siquiera vea la diferencia entre instance_destroy() y instance_deactivate_object(), ya que ambos dejan al objeto sin uso.

El objeto tiene que estar en la room para poder funcionar.

La diferentes en es que instance_destroy(), elimina el objeto definitivamente y instance_desactivate_object() solamente desactiva los eventos de dicho objeto pero aun sigue existiendo.
Aun así funciona mal, cuando el jugador esta en una "room" que lo desactiva, esta se queda desactiva para siempre a pesar de que ingrese a una "room" que lo activa, en pocas palabras el objeto esta destruido a pesar que que se use instance_activate_object() para volverlo a usar.

La 1° room tenia al objeto (activo)
La 2° room tenia al objeto por ser persistente (activo)
La 3° room desactivo/destruyo al objeto por instance_deactivate_object() (desactivado)
Al volver a la 2° room se volvió desactivado a pesar de que es una room activo.


Cita de: desplo en Noviembre 04, 2017, 08:17:15 PM

Aun así funciona mal, cuando el jugador esta en una "room" que lo desactiva, esta se queda desactiva para siempre a pesar de que ingrese a una "room" que lo activa, en pocas palabras el objeto esta destruido a pesar que que se use instance_activate_object() para volverlo a usar.

La 1° room tenia al objeto (activo)
La 2° room tenia al objeto por ser persistente (activo)
La 3° room desactivo/destruyo al objeto por instance_deactivate_object() (desactivado)
Al volver a la 2° room se volvió desactivado a pesar de que es una room activo.

En cual evento estas utilizando esto?

Cita de: desplo en Noviembre 06, 2017, 02:51:57 AM

Cita de: desplo en Noviembre 04, 2017, 08:17:15 PM

Aun así funciona mal, cuando el jugador esta en una "room" que lo desactiva, esta se queda desactiva para siempre a pesar de que ingrese a una "room" que lo activa, en pocas palabras el objeto esta destruido a pesar que que se use instance_activate_object() para volverlo a usar.

La 1° room tenia al objeto (activo)
La 2° room tenia al objeto por ser persistente (activo)
La 3° room desactivo/destruyo al objeto por instance_deactivate_object() (desactivado)
Al volver a la 2° room se volvió desactivado a pesar de que es una room activo.

En cual evento estas utilizando esto?
Bueno es algo como esto, todo ocurre en room_star y básicamente son activos y desactivo en "X" lugar, lo ordene a modo de lista.
ROOM_STAR//////////////////////////////////
///Activar por cuarto
//Activar
if (room = rom_Zona_Nexo) or
   (room = rom_Zona_Tutorial) or
   (room = rom_Templo_Siniestro) or
   (room = rom_Presentacion_Jefe) or
   (room = rom_Atajo) or
   (room = rom_jefe_Espectador) or
   (room = rom_jefe_Cazador) or
   (room = rom_jefe_Caminante) or
   (room = rom_jefe_Merodeador) or
   (room = rom_jefe_Centinela) or
   (room = rom_jefe_Infernal) or
   (room = rom_jefe_El_Amo) or
   (room = rom_Zona_Reto3_3) or
   (room = rom_Zona_Secreta1) or
   (room = rom_Zona_Secreta2) or
   (room = rom_Zona_Secreta3) or
   (room = rom_Zona_Secreta4) or
   (room = rom_Zona_Reto1_1) or
   (room = rom_Zona_Reto1_2) or
   (room = rom_Zona_Reto1_3) or
   (room = rom_Zona_Reto1_4) or
   (room = rom_Zona_Reto1_5) or
   (room = rom_Zona_Reto1_6) or
   (room = rom_Zona_Nivel_San_Valentin) or
   (room = rom_Zona_Nivel_Pascua) or
   (room = rom_Zona_Nivel_Hallowen) or
   (room = rom_Zona_Nivel_Navidad)
   {instance_activate_object(obj_Modo_Linterna)
}
//Desactivar
if (room = rom_Zona_Espectador) or
   (room = rom_Zona_Cazador) or
   (room = rom_Zona_Caminante) or
   (room = rom_Zona_Merodeador) or
   (room = rom_Zona_Centinela) or
   (room = rom_Zona_Infernal) or
   (room = rom_Zona_Desafio1) or
   (room = rom_Zona_Desafio2) or
   (room = rom_Zona_Reto2_1) or
   (room = rom_Zona_Reto2_2) or
   (room = rom_Zona_Reto2_3) or
   (room = rom_Zona_Reto2_4) or
   (room = rom_Zona_Reto2_5) or
   (room = rom_Zona_Reto2_6) or
   (room = rom_Zona_Reto3_1) or
   (room = rom_Zona_Reto3_2) or
   (room = rom_Final_Neutral) or
   (room = rom_Final_Intermedio) or
   (room = rom_Final_Verdadero) or
   (room = rom_Final_Secreto)
   {instance_deactivate_object(obj_Modo_Linterna)
}

Cita de: Naitsabes0 en Noviembre 06, 2017, 03:54:36 AM
ROOM_STAR//////////////////////////////////
///Activar por cuarto
//Activar
if (room = rom_Zona_Nexo) or
   (room = rom_Zona_Tutorial) or
   (room = rom_Templo_Siniestro) or
   (room = rom_Presentacion_Jefe) or
   (room = rom_Atajo) or
   (room = rom_jefe_Espectador) or
   (room = rom_jefe_Cazador) or
   (room = rom_jefe_Caminante) or
   (room = rom_jefe_Merodeador) or
   (room = rom_jefe_Centinela) or
   (room = rom_jefe_Infernal) or
   (room = rom_jefe_El_Amo) or
   (room = rom_Zona_Reto3_3) or
   (room = rom_Zona_Secreta1) or
   (room = rom_Zona_Secreta2) or
   (room = rom_Zona_Secreta3) or
   (room = rom_Zona_Secreta4) or
   (room = rom_Zona_Reto1_1) or
   (room = rom_Zona_Reto1_2) or
   (room = rom_Zona_Reto1_3) or
   (room = rom_Zona_Reto1_4) or
   (room = rom_Zona_Reto1_5) or
   (room = rom_Zona_Reto1_6) or
   (room = rom_Zona_Nivel_San_Valentin) or
   (room = rom_Zona_Nivel_Pascua) or
   (room = rom_Zona_Nivel_Hallowen) or
   (room = rom_Zona_Nivel_Navidad)
   {instance_activate_object(obj_Modo_Linterna)
}
//Desactivar
if (room = rom_Zona_Espectador) or
   (room = rom_Zona_Cazador) or
   (room = rom_Zona_Caminante) or
   (room = rom_Zona_Merodeador) or
   (room = rom_Zona_Centinela) or
   (room = rom_Zona_Infernal) or
   (room = rom_Zona_Desafio1) or
   (room = rom_Zona_Desafio2) or
   (room = rom_Zona_Reto2_1) or
   (room = rom_Zona_Reto2_2) or
   (room = rom_Zona_Reto2_3) or
   (room = rom_Zona_Reto2_4) or
   (room = rom_Zona_Reto2_5) or
   (room = rom_Zona_Reto2_6) or
   (room = rom_Zona_Reto3_1) or
   (room = rom_Zona_Reto3_2) or
   (room = rom_Final_Neutral) or
   (room = rom_Final_Intermedio) or
   (room = rom_Final_Verdadero) or
   (room = rom_Final_Secreto)
   {instance_deactivate_object(obj_Modo_Linterna)
}

El evento room start se utiliza en la room en la cual el objeto fue creado. Esto significa que tu objecto persistente solamente va a utilizar este evento cuando inicias la room en donde fue creado.
Te recomiendo utilizar un step

Cita de: desplo en Noviembre 06, 2017, 04:39:43 AM
Cita de: Naitsabes0 en Noviembre 06, 2017, 03:54:36 AM
ROOM_STAR//////////////////////////////////
///Activar por cuarto
//Activar
if (room = rom_Zona_Nexo) or
   (room = rom_Zona_Tutorial) or
   (room = rom_Templo_Siniestro) or
   (room = rom_Presentacion_Jefe) or
   (room = rom_Atajo) or
   (room = rom_jefe_Espectador) or
   (room = rom_jefe_Cazador) or
   (room = rom_jefe_Caminante) or
   (room = rom_jefe_Merodeador) or
   (room = rom_jefe_Centinela) or
   (room = rom_jefe_Infernal) or
   (room = rom_jefe_El_Amo) or
   (room = rom_Zona_Reto3_3) or
   (room = rom_Zona_Secreta1) or
   (room = rom_Zona_Secreta2) or
   (room = rom_Zona_Secreta3) or
   (room = rom_Zona_Secreta4) or
   (room = rom_Zona_Reto1_1) or
   (room = rom_Zona_Reto1_2) or
   (room = rom_Zona_Reto1_3) or
   (room = rom_Zona_Reto1_4) or
   (room = rom_Zona_Reto1_5) or
   (room = rom_Zona_Reto1_6) or
   (room = rom_Zona_Nivel_San_Valentin) or
   (room = rom_Zona_Nivel_Pascua) or
   (room = rom_Zona_Nivel_Hallowen) or
   (room = rom_Zona_Nivel_Navidad)
   {instance_activate_object(obj_Modo_Linterna)
}
//Desactivar
if (room = rom_Zona_Espectador) or
   (room = rom_Zona_Cazador) or
   (room = rom_Zona_Caminante) or
   (room = rom_Zona_Merodeador) or
   (room = rom_Zona_Centinela) or
   (room = rom_Zona_Infernal) or
   (room = rom_Zona_Desafio1) or
   (room = rom_Zona_Desafio2) or
   (room = rom_Zona_Reto2_1) or
   (room = rom_Zona_Reto2_2) or
   (room = rom_Zona_Reto2_3) or
   (room = rom_Zona_Reto2_4) or
   (room = rom_Zona_Reto2_5) or
   (room = rom_Zona_Reto2_6) or
   (room = rom_Zona_Reto3_1) or
   (room = rom_Zona_Reto3_2) or
   (room = rom_Final_Neutral) or
   (room = rom_Final_Intermedio) or
   (room = rom_Final_Verdadero) or
   (room = rom_Final_Secreto)
   {instance_deactivate_object(obj_Modo_Linterna)
}

El evento room start se utiliza en la room en la cual el objeto fue creado. Esto significa que tu objecto persistente solamente va a utilizar este evento cuando inicias la room en donde fue creado.
Te recomiendo utilizar un step
Listo lo coloque en un step y cuando se desactiva ya no se vuelve a activar, se supone que el objeto esta desactivo no destruido ¿porque no esta funcionando? tal vez instance_activate_object no funciona con step o el código que esta empleado.

Cita de: Naitsabes0 en Noviembre 06, 2017, 07:56:12 PM

Listo lo coloque en un step y cuando se desactiva ya no se vuelve a activar, se supone que el objeto esta desactivo no destruido ¿porque no esta funcionando? tal vez instance_activate_object no funciona con step o el código que esta empleado.

Este codigo lo utilizas en un objecto persistente verdad?

La verdad mejor te recomendaria crear el objecto en el evento create de cada room cuando sea necesario.

Cita de: desplo en Noviembre 06, 2017, 08:23:41 PM
Cita de: Naitsabes0 en Noviembre 06, 2017, 07:56:12 PM

Listo lo coloque en un step y cuando se desactiva ya no se vuelve a activar, se supone que el objeto esta desactivo no destruido ¿porque no esta funcionando? tal vez instance_activate_object no funciona con step o el código que esta empleado.

Este codigo lo utilizas en un objecto persistente verdad?

La verdad mejor te recomendaria crear el objecto en el evento create de cada room cuando sea necesario.
Me estas diciendo que debo abrir el "creation_code" de cada "room" ¿porque no hay forma en que estas funciones puedan ejecutarse? entonces no hay función o evento que pueda activarse por "room"?

La verdad tengo un mecanismo que toca la música de fondo dependiendo de la "room" usa los eventos room_star y room_end.

Cita de: Naitsabes0 en Noviembre 07, 2017, 01:48:15 AM
Cita de: desplo en Noviembre 06, 2017, 08:23:41 PM
Cita de: Naitsabes0 en Noviembre 06, 2017, 07:56:12 PM

Listo lo coloque en un step y cuando se desactiva ya no se vuelve a activar, se supone que el objeto esta desactivo no destruido ¿porque no esta funcionando? tal vez instance_activate_object no funciona con step o el código que esta empleado.

Este codigo lo utilizas en un objecto persistente verdad?

La verdad mejor te recomendaria crear el objecto en el evento create de cada room cuando sea necesario.
Me estas diciendo que debo abrir el "creation_code" de cada "room" ¿porque no hay forma en que estas funciones puedan ejecutarse? entonces no hay función o evento que pueda activarse por "room"?

La verdad tengo un mecanismo que toca la música de fondo dependiendo de la "room" usa los eventos room_star y room_end.

No sé si el problema es debido a esto, pero un objeto no puede "activarse" solo. Se puede desactivar a sí mismo, pero una vez desactivado, otro objeto debe activarlo de vuelta. Para eso poner ese código que tienes dentro de otro objeto.

Pero una pregunta: ¿Realmente lo necesitas persistente? Tal vez podrías hacerlo no-persistente y crearlo en los rooms que lo necesites.

Saludos.
Vota nuestro proyecto en Steam Greenlight:

Estudios Naicura Ltda