sábado, 31 de marzo de 2012

Programando IV: ActionScript 3.0 (Sentencias de control – for)

Vamos ahora a la parte de las sentencias de control que se conoce como sentencias de repetición o bucles, y que consiste en un fragmento de código que se repite un número de veces en función de una condición.

Voy a ver si me explico mejor. Imaginemos que necesitamos poner en pantalla 200 arboles para un bosque donde se desarrolla la aventura de nuestro juego. ¿Necesitamos copiar 200 lineas de código iguales que los pongan? Pues no, ya que es mucho mas facil decirle al ordenador algo así como “mientras no haya 200 arboles, sigue ejecutando esto que yo te digo, para ponerlos en pantalla”.

La primera sentencia de repetición que vamos a ver en AS3 es for, cuya sintaxis general es la siguiente:

for (variable; condicion; incremento) {
     Sentencias que se van a repetir;
}


La variable se puede inicializar dentro del for o antes y la condición se lee como “esto ocurrira mientras esta condicion se cumpla”. Por último, el incremento se pone por que si no hay cambio en la variable que ejecuta la condición se producirá un bucle infinito y el programa se bloqueara. ¡Cuidado por tanto con los bucles infinitos!

Vamos a ver un programa sencillísimo de ejemplo con el for para irlo entendiendo mejor:

for (var i:int=0;i<=9;i++){ 
    trace("valor de i es "+i); 
}

La salida sería la siguiente:


Tenemos una variable i, que podemos declarar e inicializar en el for o antes del for, y que hemos puesto a 0 (var i:int=0) seguido de un punto y coma y un “mientras i sea menor o igual que 9. Por último el i++ nos indica que se incrementará la i en uno a cada paso por el bucle. (Para eso sirve el operador ++, es igual que i=i+1).

El programa hace la sentencia dentro del trace hasta que se cumple que i sea mayor que 9, y como la i también esta en el trace y va cambiando su valor, se van imprimiendo los distintos números.

Aunque el for recibe 3 parametros entre los punto y coma, el unico obligatorio es el de la condición, pero los punto y coma deben aparecer también. La declaración e inicialización de la variable pueden estar antes del for, como ya he dicho y el incremento, puede estar dentro del propio bucle. El programa entonces, quedaría de la siguiente forma:

var i:int=0;

for (;i<=9;){ 

    trace("valor de i es "+i); i++; 
}

Hay otros dos tipos de bucles que iremos viendo, pero que tienen un efecto bastante parecido, aunque digamos que el for se usa sobretodo para un tipo de bucle que sabemos seguro cuantas veces queremos que se repita.

Próximamente while y do-while, y muy muy pronto estaremos poniendo cosas en pantalla. ¡Yuhu! Sabiendo muy poquitas cosas ya se podría hacer un juego sencillo. Pronto empezaré a mostrar el camino para lograr uno. :P

miércoles, 28 de marzo de 2012

Libros: Unity 3.x Game Development by Example: Beginner's Guide

Para volver a tener contacto con el anteriormente abandonado por mi, motor Unity, he decidido hacerme con un buen arsenal de cursos, tutoriales y libros, además de unos cuantos archivos de entornos y personajes en 3D anteriormente modelados, por si llegaba el momento de usarlos. Así, mi primera opción ha sido el volumen titulado Unity 3.x Game Development by Example que tiene bastante buena pinta según lo que he podido hojear.

Para empezar, como en la mayoría de textos sobre Unity, se entra en materia con el entorno: Para que sirve cada zona de la pantalla, como crear un proyecto, guardarlo, etc. Despues, tenemos un capitulo donde se nos intenta aconsejar que entremos en razón y no empecemos creando para nuestro primer juego, una superproducción de las que aparecen en las consolas de última generación y nos conformemos con algo más pequeño que podamos terminar. De esta forma, tras todo esto, el autor empieza a entrar en materia con algunos ejemplos sencillos en los que se tratan tanto la parte de escribir código como la gráfica, pero eso si, no hace mucho uso de objetos 3D y se dedica en prácticamente todo el libro a juegos sencillos. Poco importar objetos desde software de modelado para mi gusto. Es por esto último que he empezado a buscar más material que me ayude en esto, por que aunque no debe tener mucho misterio importar objetos, esta claro que conseguir que se muevan por la pantalla para crear un juego 3D es otro cantar.

Primitivas (objetos 3D que vienen creados por defecto), luces y efectos son tratados a lo largo de todas las páginas, así que para usuarios novatos, el aprendizaje de las bases del motor está asegurado. Y como yo soy un poco novato…

En fin, como tengo necesidad de más información (mucha más). Cuando la tenga la comentaré, y si hago avances en el manejo se iran viendo por aquí.

domingo, 25 de marzo de 2012

Programando III: ActionScript 3.0 (Sentencias de control – switch)

Más concretamente hablamos de una sentencia de selección con condicional múltiple, es decir, que podemos elegir muchas opciones de entre unos posibles valores. Ya veis, ideal para el menu de nuestro futuro videojuego.

La sentencia funciona de forma genérica de la siguiente forma:

switch(variable) {
     caso 1:
         sentencias;
     break;
     caso 2:
         sentencias;
     break;
     caso n:
         sentencias;
     break;
     default:
         sentencias;
     break;
}


Como se puede ver, aunque se podría conseguir lo mismo con la sentencia if, de la que hablé en post anteriores, esta orden simplifica mucho las cosas cuando hay muchos casos para evaluar.

Hagamos un pequeño programa para practicar con el switch:

var opcion:Number=1;

switch (opcion) {
     case 0:
         trace("Esto se visualiza si elegimos la opción 0");
     break;
     case 1:
         trace("Esto se visualiza si elegimos la opción 1");
     break;
     case 2:
         trace("Esto se visualiza si elegimos la opción 2");
     break;
     default:
         trace("Texto para cuando la opcion no sea ninguna de las anteriores");
     break;
}

En este caso concreto, la salida del código anterior es:


Pero si cambiamos el valor de la variable opcion, podremos ver como la salida del programa cambia a los textos que aparecen en los otros case.
Con esto podríamos tener un menú donde seleccionemos si empezamos nuestro juego, vemos los creditos o salimos (por ejemplo), asociando cada opcion a una variable con valores 0,1 y 2 que mandaran al usuario a la pantalla elegida. Bastante sencillo.

Hay que destacar que el caso default es opcional pero recomendable, es decir, que no tiene por que aparecer, pero suele ser conveniente que esté, para evaluar casos que puedan darse de forma inesperada (Aunque evidentemente en el ejemplo del menu podemos saber seguro que no habra casos inesperados y pasar del default). Por lo demás, el número de casos que aparezcan los decidirá el programador dependiendo de lo que necesite.

Más cosas: el break es una sentencia que existe aparte del switch y que indica la salida de un bucle (repeticion) de código. En el caso del switch indica el final de las sentencias que se ejecutarán en cada caso.


En fin, seguramente los pequeños tutoriales que hago aquí por temas de espacio y de lo escasamente habil que soy explicando estas cosas queden un poco… “para gente que ya sabe algo de programación”. Pero con el tiempo, cuando comente algún ejemplo más visual o la creación de algún minijuego, entraré más en detalle en las cosas que necesiten aclaraciones o explicaciones extra.

Próximamente más

viernes, 23 de marzo de 2012

Varios temas del día

Hoy no me tocaba escribir pero como es viernes, he salido antes de clase y tengo todos los deberes hechos (más o menos) como los niños buenos me apetecía hablar de unas cuantas cosillas, aunque esta vez no traigo imágenes ni juegos hechos por mi. :P

Para empezar: Siempre me alegro de que mis antigüos compañeros de proyectos saquen adelante ideas o consigan tener éxito, y en el caso de gente de la que tuve la suerte de aprender, como profesores en cursos interesantes, aun más, así que quería compartir con todos los que leen lo que escribo la salida a la venta del videojuego Clippox, en el que participa mi antiguo profe de guión (Daniel González) y Betatester cuando era alumno de Gametopía.

El proyecto tiene una pinta muy buena y, como muchos otros juegos que se hacen en nuestro país, sean grandes o pequeños, a los que nos queremos dedicar a esto nos ilusiona bastante ver como hay gente que termina proyectos y les da salida.

En http://www.gametopia.es/clippox/ teneís toda la información y a continuación os pongo un trailer:



Lo siguiente viene por la lectura de una serie de articulos (en inglés) en la web de Game Career Guide sobre como entrar en la industria del videojuego. Aunque las cosas son diferentes en España, como en casi todo, me han parecido muy interesantes y me apetece recomendarlos, por lo que adjunto enlaces a los textos:

Articulo 1, Articulo 2, Articulo 3

Y lo último surge de la lectura de los articulos anteriores y de este mismo post, y es que en una parte de la lectura recomiendan el motor Unity para practicar el desarrollo creando demos o juegos sencillos, tanto para programadores que se pueden formar picando código de juegos como para, por ejemplo, grafistas que se divertiran integrando sus escenas en el motor. Es por ello que me han surgido las ganas de retomar el contacto con Unity, pero como no tengo nada de tiempo y estoy a otras 1000 cosas, es probable que se quede instalado en mi PC ocupando disco. Aun así, a los que podais y os apetezca trastear con él, lo recomiendo, ya que tiene una versión gratuita con la que se pueden hacer grandes juegos.

Y con esto nace una nueva temática para escribir entradas en el Blog: Algo así como “cosas que hice hoy” en la que evidentemente no voy a hablar de lo que desayuné o la pelicula que voy a ver por la noche, pero si de otras cosas que tengan que ver con mi proceso de aprendizaje sobre videojuegos o la busqueda de empleo en su industría.

miércoles, 21 de marzo de 2012

Aprender técnicas de modelado 3D en Internet

Cuando empezaba a meterme en el mundillo no existia Internet y había que buscar tutoriales en revistas (ya lo he contado alguna vez), pero hoy en día la red esta llena de ellos, ya sea en video, en forma de libros, en audio, etc. Además, aunque muchas de las opciones son de pago, lo gratis abunda.

En revistas que se pueden comprar online como Game Developer Magazine recopilan algunos articulos que enseñan a modelar en una gran variedad de software: 3D Studio, Maya, Blender o Softimage, y las técnicas que se aprenden siguiendo paso a paso las explicaciones se nos van quedando grabadas y vienen a nuestra mente cuando buscamos soluciones en el desarrollo de algún proyecto personal.

Así, practicando, se cogen habitos y todo se hace más rápido, pero además vienen bien los consejos de profesionales y si seleccionamos bien, encontraremos muchas cosas útiles. (Sobretodo de modelado, de texturas hay bastante menos).

Yo mismo, partiendo de Webs online o pdfs (algunos antiguos) he ido mejorando y poniendo en práctica recomendaciones para modelar objetos por mi cuenta.

Las primeras imágenes son renders que conseguí gracias a tutoriales paso a paso.



Las siguientes, fueron cosa mia, incluyendo el cochecito con poquisimos polígonos y una textura de 64x64 pixels, como los modelos de las antiguas consolas portátiles :P




domingo, 18 de marzo de 2012

Evolución de proyectos

La falta de tiempo libre y el cansancio que me provocan los estudios, a veces me impide comprometerme con proyectos con otras personas. Por otro lado, los proyectos personales, al no tener que cumplir con fechas, aunque lentos, siguen avanzando muy poco a poco. ¿Qué pasa por lo tanto con el Blog? Que al no tener muchas cosas nuevas que mostrar por que todo lo que hago ahora tiene que ver más con la programación, se me queda un poco vacío de imágenes para mi gusto. Además, no suelo comentar cosas de mis estudios, por lo que tengo que exprimirme el seso para que se me ocurra que puedo comentar.

Por un momento he pensado ponerme a explicar lo que voy aprendiendo nuevo en clase, pero como siempre me he negado a que esta página dedique excesivo espacio a la programación y, por otro lado, necesito un pequeño empujon para mis proyectos, mi decisión ha sido comentar la evolución de los mismos. Los que están a medias y esperan ser acabados en el futuro, los que estan parados y a aguantando que unos se acaben para que llegue su turno, y los que son un simple entretenimiento para aprender.

Es hora de exponer cosas y, aunque nunca fui muy partidario de ello, comentar los avances para forzarme a mi mismo a, cuando visite el Blog y los vea, continuarlos. Así si veo que algo esta demasiado tiempo en stand by, me podré regañar a mi mismo y ponerme las pilas: pinta, dibuja, modela, programa, escribe, documenta, compon música, ¡pero hazlo ya! En ese ratito libre que te quede. Por que aunque sean un par de fotogramas de una animación, una hoja más en la documentación o un par de lineas de código, cada pequeño paso es un logro, que era el lema de esta Web.

En definitiva: pronto una nueva sección de evolución de mis proyectos.

miércoles, 14 de marzo de 2012

Programando II: ActionScript 3.0 (Sentencias de control – if)

El ordenador va leyendo lineas de código una a una empezando por un principio y continuando hacía abajo. ¿Cómo hacemos que tome un camino u otro? Pues con las sentencias de control, que consiguen que una acción se repita, se seleccione un camino u otro en funcion de una condición, etc. Así, si en nuestro juego el usuario pulsa la tecla de salto, hay un evento que esta diciendo al programa que se ha cumplido la condición de que esa tecla este pulsada y que por lo tanto, el prota debe saltar. Es basicamente este sistema, pero a gran escala, el que consigue que se desarrollen miles de acciones en nuestra pantalla en el momento oportuno para que podamos echar una partidita.

Sentencias de Selección

Para empezar tenemos la sentencia if, que es como preguntar (en inglés) al ordenador si algo ocurre, para decirle “pues entonces haz esto”, e incluso podemos decirle “en caso contrario haz esto otro”.

Se hace así:

if (condicion) {
sentencias a realizar;
} else if (condicion2) {
sentencias a realizar en este caso;
} else {
sentencias en caso de que no se cumplan ninguna de las condiciones anteriores;
}


Hagamos un programa para ver esto:

var opcion:Number=1; // Declaramos 3 variables
var opcion2:Number=1;
var opcion3:Number=2;

/* Hay 3 formatos de if-> if sin else, if con else y por ultimo if con
elseif y con else */

if(opcion==1){
trace("opcion vale 1, Se cumple la condición del primer if");
}

if(opcion2==0){
trace("opcion2 vale 1, Se cumple la condición del segundo if");
} else {
trace("opcion2 vale 0, No se cumple la condición del segundo if");
}

if(opcion3==1){
trace("opcion3 vale 1, Se cumple la condición del segundo if");
} else if (opcion3==2){
trace("opcion3 vale 2, Se cumple segunda condición del segundo if");
} else {
trace("opcion3 vale 0, No se cumple la condición del segundo if");
}

// ya hemos terminado de probar los if


La salida del programa sería la siguiente:


Debemos destacar también algo importante, los comentarios:

En los lenguajes de programación se pueden incluir comentarios para aclarar cosas de nuestro programa. El ordenador simplemente los ignora, pero el programador puede verlos y aclarar lo que hizo su compañero para resolver un problema.

En ActionScript los comentarios son:

// comentario de una sola linea

/* comentario de varias lineas
y que debe cerrarse donde
queramos que termine*/


Es decir, o con dos signos / al principio de la linea (no es necesario cerrarlo, ya que acaba al final de la linea) o encerrando el texto entre /* y */

Ahora que ya entendemos los comentarios volvamos a la sentencia if.

Como hemos visto se puede usar el if:

- Con una condición y que en caso de que no se cumpla no ocurra nada. (if sin else).
- Con una condición y que en caso de que no se cumpla haga otra cosa. (if con else).
- Con una condición y que en caso de que no se cumpla, evalue otra condición (u otras) y haga otra cosa y, por último, si no se cumple ninguna condición haga algo totalmente distinto. (if con else if y con else).

No se que tal me explicaré, pero para la próxima seguiré con otra sentencia de selección. El Switch.

domingo, 11 de marzo de 2012

Técnicas de guión aplicadas a videojuegos VI: Deus ex Machina



He leido bastante sobre esta “técnica” en diferentes libros de guión y de escritura de historias, y en todos se destaca lo dificil que es dominarla y lo facil que es hacerlo mal y conseguir que se pierda el lector.

Digamos que se trata de hacer que un elemento externo a la historia principal sea el que resuelva la trama en un momento concreto. En muchos casos, la forma de hacer esto que he visto es la más sencilla, es convertir a un personaje secundario en el salvador de la situación, sorprendiendo al espectador y poniendo al protagonista en un apuro tan grande que necesita de ayuda externa. Recordemos que poner al prota muchos obstaculos hace la historia más interesante que si consigue sus objetivos facilmente, y en este caso llevamos al extremo dichos obstaculos, llegando casi a hacer que fracase.

Recuerdo haber leido un caso de Deus Ex Machina que me encantó. Un comic en el que te acostumbras a una protagonista que es una maga e invoca con sus cartas todo tipo de criaturas y, llega un punto, en que la cosa se pone tan chunga, que su invocación, que es un guerrero, en un momento en que la hechicera esta enfrentandose al malo y las fuerzas de ambos chocan y están al límite, acaba con el antagonista. En esta escena, la que hasta ahora habia sido la prota, muere, y ahora el guerrero pasa a protagonizar la historia en las siguientes temporadas. Sin duda algo muy arriesgado por parte del autor que dejaría impactados a sus lectores. (No recuerdo el título de la obra, lo siento, :P)


Ahora hagamonos la pregunta de siempre ¿Cómo podemos usar esto en videojuegos?

Imaginemos un juego en el que controlamos un personaje y de vez en cuando nos encontramos a su hermano, que es simplemente un secundario y no llega a la altura del prota en cuanto a fuerza o velocidad, pero al final de la historia, cuando tenemos que enfrentarnos al jefe final, el prota se ve en un apuro y pasamos los mandos del jugador al hermano para que resuelva la situación manejandole. Si lo hacemos bien puede ser interesante, pero hay que tener cuidado para que el usuario lo entienda.

Normalmente al hacer esto deberíamos ir dando pistas sutiles durante todo el juego para que se entienda que aquello podía pasar, pero además, como hablamos de videojuegos, debemos tener en cuenta la curva de aprendizaje del jugador y su manejo del control: Lleva horas jugando y se ha acostumbrado a una interfaz, unas acciones y una forma de manejar al personaje, así que si cambíamos de prota en el último nivel mas nos vale no ponerle una forma diferente de controlarlo, por que a estas alturas no vamos a hacer un tutorial de manejo. Lo mejor en este caso es buscar la forma de hacer compatibles las diferentes personalidades con el mismo modo de golpear o lanzar las magias.

Por supuesto hay otros modos de usar Deus Ex Machina, pero ya lo se lo dejo a la imaginación de cada uno. Se puede introducir cualquier cosa inesperada siempre que el usuario lo vaya entender. ¿Tal vez un monstruo, un robot o una criatura mitólogica que salve al prota y acabe con el malo?

Ale, a pensar en ello.

viernes, 9 de marzo de 2012

Realidad Aumentada. Crea tus propias aplicaciones

Realidad Aumentada. Crea tus propias aplicaciones nos presenta algo que esta muy de moda actualmente en el mundo de los videojuegos y que evoluciona y sorprende cada día más, y es que resulta realmente impresionante la primera vez que miras a la mesa del salon y, sin que haya nada realmente, si ves a través de la pantalla de la consola, empiezan a salir pequeños monstruitos que luchan entre si y lanzan rayos, o un dragon que amenaza con quemarte con su llamarada.

Evidentemente nada de esto es real, es un mundo de juego que se extiende a la realidad gracias a una tarjeta o una carta que indica a la maquina unas referencias para que sepa donde estaría el eje x, y o z en la imagen del mundo real que esta registrando la cámara en ese momento.

Así, si quereis saber más sobre este tema desde el punto de vista de un desarrollador recomiendo este libro, que es la traducción española de una versión americana titulada Prototyping Augmented Reality cuyo autor es Tony Mullen, y donde se usa software como Blender para modelar, Gimp para crear texturas y lenguajes de programación como Processing para poder hacer nuestros pinitos en el mundo de la Realidad Aumentada. Así, si un día nos contratan y nos vemos inmersos en un proyecto relacionado, ya podemos decir que tenemos algo de experiencia y no solo jugando, sino creando.


De paso es interesante aprender algo de modelado y animación en software libre como Blender o Gimp, e incluso conocer algunas técnicas de bakeo de texturas (bakeo es como falsificación, usando texturas, de luces o relieves, por ejemplo).

Por mi parte tendría que trastear un poco con esto, ya que mi experiencia con la RA se limita a unas partidas con las tarjetas que incluian la Nintendo 3DS cuando la compré y quizá algún concepto de diseño de juego que se me pudiera ocurrir mientras echaba la partida. Poco más que eso y ver en televisión el éxito que esta teniendo la empresa española Novarama en PSP y PS Vita gracias a esta tecnología.

lunes, 5 de marzo de 2012

Juegos que me influyeron como desarrollador XI: Solomon's Key

Si hablamos de juegos de puzzle, este juego desarrollado en 1986 por la compañía Tecmo, fue el que más impacto me causó en el pasado por lo gracioso del personajillo que se movia por la pantalla y la posibilidad de resolver las fases con inteligencia o, si tenias dinero suficiente para comprarlos (en el juego, no dinero de verdad), a base de items.

El pequeño mago debía enfrentarse a toda clase de enemigos y trampas y, recibiendo ayuda de unas hadas, recolectando tesoros y descubriendo habitaciones ocultas.



La versión con la que más horas eché, debido a que tenía una dificultad más moderada respecto a las otras versiones como la de NES, fue la de Game Boy, cartucho que si no recuerdo mal llegué a terminar.

Gracias a Solomon’s Key, o más concretamente a Solomon’s Club (version de Game Boy), empecé a entender como se usaban rejillas y tiles para formar los niveles de los juegos de antes (Aunque en los de ahora también pasa pero en 3D), aunque tardaría mucho más en comprender el uso de matrices en programación.



Quedó a medias una especie de proyecto-homenaje que pensaba hacer en Div Games Studio, con la misma jugabilidad y un personaje algo más mujeriego (para que hubiera también magas :P), incluyendo algunas mejoras como enemigos de final de fase a los que enfrentarnos sirviendonos de nuestra inteligencia y de la mécanica principal de poner y quitar bloques.

Puesto que los juegos hechos en Div dejaron de poder jugarse a partir de las nuevas versiones de Windows en las que desapareció el Ms-Dos tal y como existía en las antiguas. Codigo fuente y graficos se quedaron en el limbo de mi disco duro. Sin embargo, durante el breve desarrollo aprendí mucho.

En estos casos nunca se pierde el tiempo si se hace todo con ilusión.