Hacer caer objetos es simple, solo basta definir su posición inicial (coordenadas "x" y "y" en la pantalla) y comenzar a aumentar la coordenada "y" (en Flash las coordenadas "y" comienzan en la parte alta de la pantalla y "crecen" hacia abajo. nunca he sabido la razón de esto).
Después de unas pruebas, ya tengo los datos de la coordenada "y" inicial, para que los objetos comiencen a caer desde un área libre de la parte superior de la pantalla (librando el encabezado, cronómetro y score). Y otras pruebas mas para obtener la coordenada "y" donde deben desaparecer en la parte inferior de la pantalla (en caso de no pegarle al gato).
var ytop:Number = 125; var ymax:Number = 470;
Una prueba "a mano" animando una croqueta indica que el código funciona.
OK.
Ahora debo decidir cómo calcular la coordenada "x", para que los objetos aparezcan en diferentes posiciones a lo ancho de la pantalla.
Una primera idea es calcular un número aleatorio (al azar) entre los límites de la coordenada "x" (0 y 800 pixeles). Asi cada objeto nuevo que comience a caer aparecerá en un lugar relativamente aleatorio en la parte superior de la pantalla.
Necesito un generador de números aleatorios, con un limite mínimo y uno máximo. Eso ya lo he hecho antes. Busco en mis proyectos anteriores y desempolvo una rutina que saqué de la gran nube de datos del internet, y que sirve muy bien.
function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min; return randomNum; }
Pero ¿Cada cuanto tiempo debo de generar un nuevo objeto cayendo? ¿Y si se empalman? ¿O se generan muy cercanos unos a otros?
Después de una primera prueba, generando objetos cada 2 o 3 segundos (auxiliandome con el contador de segundos del cronómetro) noto que se generan objetos de manera muy "desordenada" y a veces muy cercanos unos a otros, o demasiado lejanos, o en grupos a uno u otro costado de la pantalla. A veces un objeto sale casi detrás de otro que ya va cayendo.
La idea original del juego es que con el paso del tiempo se ponga mas difícil. Eso implica dejar caer objetos mas rápidamente y a mayor velocidad. La velocidad de caída no me preocupa, ya que es fácil aumentarla agregando un factor (aumentando la distancia de traslado en el eje "y").
Otra opción que se me ocurre es fijar columnas predeterminadas para dejar caer objetos siempre sobre las mismas líneas imaginarias en la pantalla (posiciones fijas). Eso facilita las cosas, ya que no hay que calcular coordenadas "x" al azar. Decido sobre 7 posiciones fijas sobre el eje "x", basado en las lineas guía que Victor dejó al crear las croquetas y perros en su diseño muestra.
Pero surgen nuevos retos:
- ¿Cómo calculo la posición de el "siguiente objeto" que cae? (dentro de alguna de las 7 posiciones fijas)
- ¿Espero a que el objeto caiga hasta el fondo para crear otro en la misma posición o dejo caer varios en la misma posición?
- Si espero a que caigan los objetos, ¿cómo sé cuando puedo utilizar nuevamente una posición que estaba llena?
- ¿Cómo sé cuando una posición esta libre o llena?
- ¿Cómo distribuyo la periodicidad de croquetas, bolsas de alimento y perros? No puedo dejar caer siempre el mismo tipo de objetos, ni siempre en las mismas posiciones.
Si tuviera mas tiempo, probaría las alternativas y decidiría cual adoptar. Así que debo decidir usando mas mi imaginación que mi mente racional. Cierro los ojos y me imagino como se podría ver cada opción, basandome en todos los juegos parecidos que he visto/jugado en mi vida. Esto es otro grifo del gran tinaco que es el universo: mis recuerdos de experiencias pasadas.
- Esperaré a que caiga un objeto para volver a usar el mismo espacio con otro objeto
- Si tuviera que hacerlo a "mano", en la vida real, para seleccionar qué objeto es el que sigue, haría una lista con los nombres de los objetos. Para seleccionar el siguiente de la lista usaría el método "de tin marín, de do pingüé...". Para disminuir la probabilidad de repeticiones, haría la lista mas larga, intercalando los nombres de los objetos, usándolos mas de una ves.
- Si tuviera que hacerlo a "mano", en la vida real, para saber cuando una posición está llena o vacía, haría una lista de las 7 posiciones y pondría una "tacha" en las que están ocupadas, y borraría la tacha de las que se liberen al llegar el objeto al fondo de la pantalla.
- Si tuviera que hacerlo a "mano", en la vida real, para saber cada cuando genero un objeto nuevo que va a caer, echaría un "volado" (flip a coin) y cada que cayera "águila" dejaría caer un nuevo objeto, en alguna posición libre. O cada 2 de 3 águilas, para que no sea tan seguido.
Manos a la obra.
No hay comentarios.:
Publicar un comentario