Muy buenas amigos.

Tengo un ligero problema con esta función.

Resulta que tengo un objeto principar en el cual tiene un evento "Create" el cual me desactiva unas cuantas instancias (con instance_deactivate_object).

y tengo otro objeto con evento "Step", el cual me controla a cada paso lo que vaya pasando.
Resumen: en este evento tengo puesto que cuando alcance los 500 puntos, una de las instancias se active.

de esta manera:
-------------------------
obj_principal_evento_create:

instance_deactivate_object(obj_moneda_1);


--------------------------
obj_secundario_evento_step:

if(score > 500){
     instance_activate_object(obj_moneda_1);
}


Pero no se activa la instancia.... Alguna solución???
Gracias.

¿podría ser que la variable score no sea global?

Si es así, tendrías dos opciones:

a) hacerla global y así puedes acceder desde cualquier sitio a ella.

b) Acceder a ella con el nombre del objeto donde esté declarada-> obj_donde_este.score

Con lo que has puesto, ahora mismo no se me ocurre nada más.

Muchas gracias por responderme.

Si, la variable score es global.

Hmm cuando llegue a los 500 exactos o cuando pase de esa cantidad?

Porque de la forma que has puesto, se activaría a partir de 501. No sé si será eso :P

Realmente sea como sea pasara de los 500, y cuando pase de los 500 la instancia deberia activarse, recordemos que es un evento step, por lo que en cada paso lee el script, ya sea en 500 o supere los 500 deberia activarse la instancia, pero no lo hace...

Revisa bien el código de los eventos en donde se aumenta el score, pude que en alguno hayas puesto algo mal.
Vota nuestro proyecto en Steam Greenlight:

Estudios Naicura Ltda

Ok, ya he encontrado el problema.

Resulta que instance_deactivate_object() no desactiva el objeto, sino que lo destruye, por lo que tengo que insertar un instance_create().

Este es un bug que espero que yoyogames lo solucione.

Un saludo.

No creo que sea un bug, de ser así ya hubiera sido reportado hace tiempo.

Lo que pasa debe ser algo de tu código.

mira te dejo esta advertencia que ponen en el Manual al usar instance_deactivate_object();:

CitarNOTE: If you deactivate an instance on room start (ie:from the room creation code, or from an instance create event of an instance within the room) all instances that are placed within the room from the room editor will still run their create event before being deactivated.

Traducido seria:

Nota: Si desactivas una instancia cuando una room empieza(Ej: desde el código de creación de la room, o desde el evento de creación de una instancia de la room) todas las instancias que fueron puestas desde el editor de la room aun ejecutaran su evento de creación antes de ser desactivadas.


En tu código desde el evento de creación del objeto principal estas desactivando los objetos, así que podría tratarse de eso.

Entonces que me recomendarias hacer?

E probado hacer lo siguiente para evitar lo que me has citado, es un poco lioso pero es una pruba:

He creado un nuevo objeto, el cual no e puesto en el editor del room.

- obj_principal_evento_create:

// He borrado el script que desactiva los objetos y lo he sustituido por lo siguiente
if(not instance_exists(obj_desactivar)){
     instance_create(0,0,obj_desactivar);
}


y en el nuevo objeto "obj_desactivar" e puesto el script que desactiva los objetos.

y aun asi no funciona, me destruye el objeto en vez de desactivarlo.

¿Como puedes asegurar de que te destruye el objeto? Si quieres saber si te lo destruye, coloca un show_message() en el evento de destrucción del objeto que dices que se destruye. Así puedes comprobarlo.
Vota nuestro proyecto en Steam Greenlight:

Estudios Naicura Ltda

Cita de: eltitobarte en Mayo 17, 2014, 02:54:36 PM
Muy buenas amigos.

Tengo un ligero problema con esta función.

Resulta que tengo un objeto principar en el cual tiene un evento "Create" el cual me desactiva unas cuantas instancias (con instance_deactivate_object).

y tengo otro objeto con evento "Step", el cual me controla a cada paso lo que vaya pasando.
Resumen: en este evento tengo puesto que cuando alcance los 500 puntos, una de las instancias se active.

de esta manera:
-------------------------
obj_principal_evento_create:

instance_deactivate_object(obj_moneda_1);


--------------------------
obj_secundario_evento_step:

if(score > 500){
     instance_activate_object(obj_moneda_1);
}


Pero no se activa la instancia.... Alguna solución???
Gracias.

Si lo pones asi: if (score > 500){
                        instance_activate_object(obj_moneda_1);
se activara en 501, 502, 503... por que todos son mayores a 500, deberias de hacerlo con un repeat o un while... o podrias decir si el score es igual a 501 o 500, la variable score es global, funciona en todos los objetos, rooms y scripts
.:RoskGames:.

Disculpa que te conteste hasta ahora, no se si ya resolviste el problema.

Pero se me ocurre que para que no se desactiven los objetos al principio y de crearse y se produzca un error, podrias usar una alarma de uno o dos steps y en el código de la alarma desactivar los objetos que quieras.

ademas este código pude también estar provocando el error:

if(score > 500){
     instance_activate_object(obj_moneda_1);
}


Porque según si el score es mayor a 500 que active el objeto, esta en el evento step, así que a cada rato va a estar intentando activar el objeto, cuando el score sea 501 va a activar todos los objetos obj_moneda_1, pero luego en el siguiente step independientemente si el score se mantiene en 501 o cambia a mas, se va a cumplir la condición de que sea mayor a 500 y esto llamara nuevamente a la función a que active el objeto obj_moneda_1, pero como ya esta activo puede que lance el error de que no encuentra la instancia.

trata de hacerlo con una bandera e igual utiliza alarmas por ejemplo:
en el evento create:
global.bandera=0

en el evento Step:
if ((global.bandera=0) && (score > 500))
{
alarm[0]=1
global.bandera=1
}


En el evento Alarma[0]:
instance_activate_object(obj_moneda_1);


Espero que puedas resolver el problema, Saludos.