Tomando como ejemplo otras series de tutoriales, he escogido para el primer ejercicio uno de los grandes juegos clásicos. A lo largo de una pequeña serie de tutoriales, intentaré programar desde 0 un clon de Pong. Aquí hay un vídeo del original, por si alguien vive en una isla sin contacto con el resto del mundo y no sabe a qué juego me refiero (No sé qué hace una persona así leyendo esta página, pero no soy nadie para criticar)
En la línea propuesta por este blog, voy a asumir que el lector tiene nulo conocimiento de AS3 y de programación en general, dándose el caso de que el propio autor tampoco sabe bien cómo dirigirse.
Así que, lo que voy a hacer en este post es analizar en qué consiste el juego que buscamos emular y, ante cualquier complejidad excesiva que nos surja en uno de los pasos, intentar en la medida de lo posible postponer la dificultad.
Pong es, simplificando, un juego en el que dos rectángulos blancos hacen las veces de raquetas de tennis, haciendo rebotar un cuadrado que hace de pelota entre ellos. Si dicho cuadrado sale de los margenes dentro de los cuales los rectángulos-raquetas maniobran, dependiendo de hacia qué lado vaya, la puntuación de uno de los bandos se incrementa. Gana quien más puntuación obtenga.
Dada la sencillez del ejemplo escogido, planteamos dos maneras de conseguir nuestro objetivo:
- La primera de ellas, más visual e intuitiva, requiere menos código y el que usemos estará orientado a las instancias (Singularizaciones de objetos, lo explico más abajo) que ya hemos creado.
- La segunda es la que se recomienda. No sólo utilizaríamos el código para establecer la dinámica del juego, sino también para "colocar las piezas en el tablero" Dicho de otro modo, vamos a generar dinámicamente el juego, esto se entenderá mejor con los ejemplos.
Antes de entrar en harina, conviene empezar distinguiendo entre dos conceptos que vamos a usar muy a menudo: Instancia y objeto.
El ejemplo típico que se suele poner para distinguir instancias de objetos suele ser el de un coche, sirve muy bien porque luego se puede extender la metáfora para que cubra otros conceptos interesantes de la programación, como los métodos. Pero quiero ir paso a paso, y por eso voy a escoger otro ejemplo que creo que puede ser incluso más fácil:
Todos tenemos en nuestras casas más de un tipo de silla. Las hay que se diferencian por el color, por el material, por la forma. Miles de millones de sillas, cada silla distinta y, sin embargo, cuando las vemos a todas las identificamos como sillas. Pasa igual con los perros. Un Rottweiler no es lo mismo que un Chihuahua, un Podenco tampoco es un Pastor Alemán. Pero somos capaces de verlos a todos y entender que, más allá de sus diferencias, pertenecen a la misma especie.
¿Por qué?
Pues porque, a pesar de muchas diferencias "superficiales", podemos ver que tienen rasgos comunes, que típicamente ladran, que, salvo accidente, son cuadrúpedos, que sudan por la lengua, que tienen rabo... Son diferentes en muchas cosas, y parecidos en muchas otras. Así que podríamos hacer una larga lista de rasgos que definen a un perro y que contrastan con otras especies animales. Imaginémosnos al perro perfecto:
- Tienen rabo
- Ladran.
- Sudan por la lengua.
- Cuatro patas.
- Domesticables.
- ...
Y ahora expongamos algunos de sus rasgos "variables":
- Pueden tener el pelo de varios colores.
- Pueden ser de distintos tamaños.
- Pueden ser más rápidos, más fuertes, más fieles... unos que otros.
El objeto "perro" se compone de unos rasgos mínimos definitorios, que comparten con todos los de su especie. Vamos a decir que es como una especie de "prototipo de perro" o "perro ideal" o "perro modelo". Luego están las "realizaciones" de ese perro ideal, con todas las variaciones posibles dentro de los límites que el ser un perro impone. Digamos que la instancia "perro" puede ser canela, puede tener las orejas gachas o de punta, pero no pueden hablar castellano, porque va contra la definición del objeto perro.
Pueden existir instancias que no sean más que las representaciones del objeto, sin añadir ningún matiz nuevo, si, por contra, le dotamos al perro que creemos como instancia de "nuevas características", serán propias únicamente de esa instancia y no afectarán al resto de instancias que se hayan creado a partir del objeto. Dicho de otra manera, que tu perro sea marrón no hace que el resto de perros se vuelvan marrones.
Si fuéramos Dioses y tuviéramos la posibilidad de cambiar el código por el que el mundo funciona, si encontrásemos dónde viene definido lo que es un perro (El objeto perro) y estableciéramos que siempre tiene que ser marrón, eso haría que todos los perros se volvieran marrones.
En programación hay variables de objeto y variables de instancia. Jerárquicamente, las más "fuertes" son las de objeto, pero nos va a resultar muy interesante saber modificar las variables de instancia, porque ello nos permitirá crear rasgos individuales para los elementos de nuestro juego.
Estoy tentado ahora de continuar y seguir explicando lo que es una clase, el tema de la herencia, no resultaría difícil, pero es que no hace falta, por ahora.
En la introducción me faltaron muchas cosas por decir, pero hay dos importantes: La primera es que mi ordenador es un PC, no un Mac. Importa relativamente poco, porque ambos son capaces de las mismas cosas, pero los atajos de teclas cambian. Como no soy usuario de Mac, no puedo destacar las diferencias, más adelante si quisiera poder hacer una pequeña reseña que fuese útil y esquemática al respecto.
Segundo, utilizo Adobe Flash CS5 y exclusivamente Action Script 3.0. Por varias razones, la primera porque es en el que mejor me muevo, segundo porque soy un fan rendido de los productos de Adobe y tercera porque no le veo sentido a hacer tutoriales de Action Script 2 cuando los que saben de estas cosas coinciden en que el 3 fue un gran paso adelante. No he probado el Macromedia Flash, así que tampoco voy a decir que uno sea mejor que el otro. Las capturas de pantalla que voy a colgar, no obstante, pertenecen al programa de Adobe.
En el próximo tutorial ya sí "abro el programa" y muestor los espectaculares gráficos que va a tener el juego. También discuto sobre el "input" de los usuarios a grandes rasgos, sobre la detección de teclas, los beneficios de usar una clase aparte y pongo ejemplos de código que es lo que interesa.
No hay comentarios:
Publicar un comentario