disculpa en tu ejemplo de flappy bird los diamantes a veces están en el mismo lugar de los cuchillos sabes como cambiarlo
Hola @Crownex, sí, me queda clara tu consulta. Lo que sucede es que tanto los diamantes como los cuchillos se generan en posiciones al azar, y por eso puede dar la casualidad de que tanto el cuchillo como un diamante obtengan un número muy similar.
Así que para resolverlo es un poco complicado, ¡pero no imposible!. Te comento cómo se puede resolver.
Primero, en lugar de calcular la posición usando la función pilas.azar
, podemos tener una lista de posiciones “sugeridas” para diamantes y cuchillos. Y cada vez que queramos agregar un actor a la escena vamos a tomar una de esas posiciones y usarla, asegurándonos de no volver a utilizar esa misma posición para el siguiente objeto.
Por ejemplo, yo elegí posiciones “sugeridas” como [200, 100, 0, -100, -200], y cambié el código de la escena para que cree los actores usando esas posiciones. Así, por citar un ejemplo, el código crea un diamante y le asigna y=200, luego un cuchillo y le asigna y=100, al siguiente le asigna y=0 etc… es decir, var “recorriendo uno a uno” los valores sugeridos y usándolos. Y una vez que termina, vuelve a a empezar.
Aquí te paso el código completo para que lo puedas probar:
https://app.pilas-engine.com.ar/#/proyecto/5a2c7900-173d-40bc-95e9-317f70d32360
Si lo jugas varias veces vas a notar que no es perfecto, incluso puede que llegues a percibir que los objetos respetan este orden y se nota mucho… pero aún así me pareció bueno mostrarlo como una solución a lo que mencionaste porque el código no es muy complejo, y se puede mejorar.
Ah, y si queres mirar en detalle dónde están los cambios, respecto del tutorial, mirá el código de la escena. Lo primero que hice fue ponerles nombre como “diamante” y “cuchillo” a los actores que se generan automáticamente y también escribí la función “crear” y las variables “posiciones” e “índice”:
Si te resulta útil, puse el código acá también para que lo puedas copiar y pegar con algunos comentarios:
class escena1 extends Escena {
posiciones: number[];
indice: number;
iniciar() {
// posiciones "y" que asignará a los actores
// recién creados. (los valores están ordenados, pero
// para hacerlo menos predecible se podríar desordenar,
// tipo [100, 200, -100, 0, etc...])
this.posiciones = [200, 100, 0, -100, -200]
this.indice = this.pilas.azar(0, this.posiciones.length - 1);
}
actualizar() {
}
cada_segundo(segundos) {
if (this.pilas.es_multiplo(segundos, 2)) {
this.crear("diamante");
}
if (this.pilas.es_multiplo(segundos, 3)) {
this.crear("cuchillo");
}
}
crear(nombre) {
// esta función clona un actor cuchillo o diamente, indicado
// por el argumento 'nombre'. Y luego de crearlo se asegura
// de colocarlo en una posición aleatoria sin repetir.
let actor = this.pilas.clonar(nombre);
this.indice += 1;
if (this.indice >= this.posiciones.length) {
this.indice = 0;
}
actor.y = this.posiciones[this.indice];
}
}
Avisanos si te sirve!!
Abrazo