Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: carras en Noviembre 27, 2013, 03:46:33 PM

Título: [RESUELTO]ayuda con alarmas!!
Publicado por: carras en Noviembre 27, 2013, 03:46:33 PM
Hola estoy haciendo un runner y para el spawn de ebmigos utilizo alarmas. En create pongo alarm[0]=random(60) y en la alarma creo el enemigo y vuelvo a poner alarm[0]=random(60) hasta aqui todo genial. Funciona.. Pero al tiempo cuando pasan unos 1000 y pico steps la alarma deja de ejecutarse y dejan de crearse enemigo necesito ayuda solo me falta el spawn para acabar el juego
Título: Re:ayuda con alarmas!!
Publicado por: Iros en Noviembre 27, 2013, 04:01:02 PM
En el evento step poné este código:

[gml]if alarm[0] < 0 {
      alarm[0] = random(60);
}[/gml]

Por cierto, te convendría ponerle un round al random para evitar que lea números con decimales.
Título: Re:ayuda con alarmas!!
Publicado por: carras en Noviembre 27, 2013, 04:32:44 PM
Ohh gracias, utilizo el ceil random tmb vale no?? Tengo dos dudas. 1 me puedes explicar el codigo que has puesto y 2 como hago para hacer un random entre 30 y 60 por ejemplo. Gracias
Título: Re:ayuda con alarmas!!
Publicado por: EnDark2000 en Noviembre 27, 2013, 04:42:20 PM
alarm [0] = 30 + random(30)
así el alarma se pone en 30 mas un numero aleatorio entre 0 y 30 :)
Título: Re:ayuda con alarmas!!
Publicado por: Iros en Noviembre 27, 2013, 04:48:10 PM
El código que puse básicamente comprueba que la alarma se haya terminado de ejecutar y cuando termine se vuelve a ejecutar, es por eso que es < 0 que sería siendo el equivalente a alarma liberada.

Para hacer el random entre dos números tenes la opción de EnDark2000 o podes usar otra función de GM, y es más, me acabo de dar cuenta que esta función te devuelve un entero:

irandom_range(x1,x2) Returns a random real number between x1 (inclusive) and x2 (inclusive). Both x1 and x2 must be integer values (otherwise they are rounded down).

Básicamente lo que hace es devolver un número entre X1 (inclusive) y x2 (inclusive), siendo x2 mayor a x1 y debe ser del tipo entero.

Si no llegara a funcionar sacale la "i" que tiene adelante de random.
Título: Re:ayuda con alarmas!!
Publicado por: carras en Noviembre 27, 2013, 05:19:34 PM
Genial voy a probarlo muchas gracias. Y cual era el problema cn la alarma? Por que al tiempo dejaba de ejecutarse??
Título: Re:ayuda con alarmas!!
Publicado por: Iros en Noviembre 27, 2013, 06:04:17 PM
El problema era que la alarma, en el evento step o cualquier evento se iba a ejecutar una sola vez porque nunca se corroboraba que esté libre, por ende, se le reasignaba más tiempo de ejecución por step y el tiempo nunca terminaría.
Título: Re:ayuda con alarmas!!
Publicado por: carras en Noviembre 27, 2013, 06:40:58 PM
Debo poner randomize en la alarma y en el step??
Título: Re:ayuda con alarmas!!
Publicado por: Iros en Noviembre 27, 2013, 10:17:44 PM
Hemm...no se porqué deberías de usar siempre la función randomize, yo nunca la he usado siempre me funciona de por si el código xD
Título: Re:ayuda con alarmas!!
Publicado por: carras en Noviembre 27, 2013, 11:19:41 PM
contador+=1
if alarm[0] < 0 {
        alarm[0] = round(random(60))
}
if alarm[0] < 0 and contador >= 300{
        alarm[0] = round(random(30))
}

por que al usar este codigo para que cuando contador sea mayor de 300 se reduzca el tiempo de la alarma para el spawn de enemigos no me funciona?? me sigue ejecutando siempre la primera alarma, no pasa a la segunda
Título: Re:ayuda con alarmas!!
Publicado por: Iros en Noviembre 28, 2013, 12:05:50 AM
Mmm...yo creo que es porque los dos tienen el mismo condicional de alarm < 0, entonces, como alarm < 0 sin el contador está primero se va a dar prioridad a ese if. Lo que podes hacer es esto:

[gml]
contador+=1;
if (contador >= 300) {
   if (alarm[0] < 0) {
      alarm[0] = round(random(30));
   }
} else {
   if (alarm[0] < 0) {
      alarm[0] = round(random(60));
   }
}
[/gml]

[EDIT]

En vez de poner el round probá la función irandom(x) que te devuelve un entero directamente. Si no llega a ser compatible con GMS vas a tener que seguir usando round() xD
Título: Re:ayuda con alarmas!!
Publicado por: carras en Noviembre 28, 2013, 12:35:05 AM
vale perfecto voy a probarlo ahora mismo, y si quisiera poner dos if mas para cuando contador sea mayor de 1000 y de 1500 como deberia ponerlo?
Título: Re:ayuda con alarmas!!
Publicado por: Iros en Noviembre 28, 2013, 12:48:47 AM
Con un simple else if te quedaría de la siguiente forma:
[gml]
contador+=1;
if (contador >= 300) {
    if (alarm[0] < 0) {
        alarm[0] = round(random(30));
    }
} else if (contador > 1000) {
   //Acción a efectuarse.
} else if (contador > 1500) {
   //Acción a efectuarse.
} else {
    if (alarm[0] < 0) {
        alarm[0] = round(random(60));
    }
}
[/gml]
Título: Re:ayuda con alarmas!!
Publicado por: carras en Noviembre 28, 2013, 12:52:42 AM
Muchas gracias por todo, voy a probarlo, ya no molestare mas por ahora jajaj