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
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.
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
alarm [0] = 30 + random(30)
así el alarma se pone en 30 mas un numero aleatorio entre 0 y 30 :)
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.
Genial voy a probarlo muchas gracias. Y cual era el problema cn la alarma? Por que al tiempo dejaba de ejecutarse??
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.
Debo poner randomize en la alarma y en el step??
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
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
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
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?
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]
Muchas gracias por todo, voy a probarlo, ya no molestare mas por ahora jajaj