Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: HelThunk en Septiembre 27, 2015, 11:01:56 AM

Título: [Solucionado] Crear nueva instancia cuando cambia una variable.
Publicado por: HelThunk en Septiembre 27, 2015, 11:01:56 AM
Buenas, estoy intentando hacer que llegado a x puntos, se ejecute una variable en la cual, hace que si hay menos de 2 bolas en la room, se cree otra.. pero no se porque no funciona (he probado varias ideas pero no hay manera);

//Puntuación = 3 añadir 1 pelota
if global.puntos = 3
{
while (global.balls<2){
instance_create(0,0,obj_ball);
global.balls += 1;
}
}


Cabe añadir que tengo un objeto_system que organiza todas las variables, las cuales tiene..;

global.puntos = 0;
global.balls = 1;

como podréis ver, global.balls empieza en 1 y no en 0 porque al intentar poner que la creación de obj_ball sume +1 a global.balls me tira un error.. (pero este no es el error que quiero solucionar, ya que vinculando otra variable adyacente a esta se puede solucionar)

También, para que se entienda más, cabe añadir que global.puntos añade +1 cuando el obj_ball recibe un click;

//Añadir +1 score
global.puntos +=1;
//Sonido click
action_sound(snd_click, 0);


*Se que explicarme no es lo mío, así que os pido disculpas con antelación.
Título: Re:Crear nueva instancia cuando cambia una variable.
Publicado por: Clamud en Septiembre 27, 2015, 04:02:04 PM
En lugar de usar la variable global.puntos deberías usar la variable score, que es global por defecto, y en lugar de crear la variable global.balls puedes usar la función instance_number. Con esos cambios el primer código quedaría así:
[gml]
//Si la puntuación es 3, debe haber 2 pelotas
if( global.puntos == 3 )
{
    while( instance_number(obj_ball) < 2 )
    instance_create(0,0,obj_ball);
}
[/gml]

El segundo bloque de código ya no sería necesario, o tal vez necesites reiniciar la puntuación:
[gml]score = 0;[/gml]

En el tercer bloque action_sound se puede cambiar por audio_play_sound.
Título: Re:Crear nueva instancia cuando cambia una variable.
Publicado por: darius en Septiembre 27, 2015, 04:06:24 PM
Puedes prescindir de la variable global.balls; si lo único que quieres es saber el número de instancias del objeto "obj_bola", entonces es más fácil usar directamente " instance_number(obj_ball)"
El código quedaría:
//Puntuación = 3 añadir 1 pelota
if global.puntos = 3
{
while instance_number(obj_ball) <2{
instance_create(0,0,obj_ball);
}
}


Esto debería resolver tu problema, pero me gustaría añadir que el código hará que se cree un obj_ball solo cuando hay más de 2 en la room y cuando la puntuación es igual a 3, es decir que  a no ser que los obj_ball puedan ser destruidos y la puntuación se resetee, el código solo se ejecutará una vez y el juego pasará a tener 3 obj_ball para siempre

Si lo que quieres es que se sigan creando más obj_ball  según la puntuación avance solo dímelo y te arreglo el código.
Saludos  :)

Edit: justo veo que ya se ha publicado una respuesta xD
Más o menos decimos lo mismo
Título: Re:Crear nueva instancia cuando cambia una variable.
Publicado por: HelThunk en Septiembre 27, 2015, 11:06:22 PM
Cita de: Clamud en Septiembre 27, 2015, 04:02:04 PM
En el tercer bloque action_sound se puede cambiar por audio_play_sound.
¿Qué ventaja trae este cambio?, ¿y el de la variable score?, simpre he pensado que usar una variable propia es mejor que una predefenida (sabes en su totalidad como funciona, es decir, tu has creado su esquema)
*Cuando llege a casa pruebo vuestros aportes, gracias por la ayuda :)

*Edito; He solucionado el problema, al implementar vuestro  código el error seguía, así que probé a poner coordenadas y se ha solucionado, es decir, ahora funciona tanto en mi código como en el vuestro.. pensaba que dejándolo en '0','0' lo que indicaba era que buscaba una posición random, ¿será que Spawnea fuera del mapa?, quién sabe, y si alguien lo sabe, sería un placer saber el por que. Un saludo y gracias.
instance_create(0,0,obj_ball);
Título: Re:Crear nueva instancia cuando cambia una variable.
Publicado por: Clamud en Septiembre 28, 2015, 03:32:44 AM
Cambiar action_sound por audio_play_sound sólo tiene la ventaja de poder definir una prioridad para el sonido que reproduce, pero si se reproducen pocos sonidos a la vez, ese argumento no tiene utilidad. La primera opción es poco común en código, sin embargo, tiene la ventaja de que es compatible con varias versiones de GM.

Las ventajas de usar la variable score son: no tienes que preocuparte por inicializarla, es una palabra más corta y todas las instancias pueden acceder a ella directamente.

En algunas ocasiones es útil usar las variables predefinidas de GM, si sabes cómo funcionan, por ejemplo, para mantener un ángulo entre los valores 0 y 360 se puede usar la variable direction que se mantiene automáticamente en ese intervalo, o puedes sumar dos vectores conociendo su ángulo y magnitud con las funciones motion_set y motion_add.

Que bueno que solucionaste el error, supongo que no entendimos bien el problema.