lunes, 28 de mayo de 2012

Videos interesantes

Hoy me encontré un par de videos interesantes relacionados con el desarrollo de videojuegos y mi deber es compartirlos. Además anoche de pasada en el programa Salvados de la Sexta que hablaba de Investigación y desarrollo escuché como se comentaba que los videojuegos eran una industria importante que ayudaba también a conseguir avances para otras industrias (se han visto muchas noticias de aplicación de Kinect o los mandos de Wii en la sanidad, por ejemplo).

Para empezar a través de Vadejuegos podemos ver un breve video sobre DigiPen donde se nos habla del desarrollo de juegos como una profesión de futuro y sin paro. Esta ultima afirmación que oigo bastantes veces me inquieta un poco y me hace pensar si personas como yo (permitidme ponerme de ejemplo por esta vez), que queremos dedicarnos a esto, (¡que lo necesitamos! ¡Lo ansiamos! ¡Vivimos por ello!) y que llevamos toooda la vida formandonos para ello, pero no encontramos trabajo ni tenemos capacidad emprendedora (llamese dinero), no somos considerados como parados del sector… Por que igual me dicen que es que no tengo carrera universitaria, pero cuando yo me metí en esto NO EXISTÍA carrera universitaria sobre videojuegos y ahora que “existe” algunos NO PODEMOS PAGARLA.

En fin, aun así el video es interesante y da envidia sana de poder moverse en ese entorno donde disfrutar de las maravillas de aprender sobre usar nuestra creatividad para crear nuevos mundos interactivos.

El segundo video es un poco “publicitario” y lo he encontrado en Revogamers. Se trata de un documental de Mega-Factorias que habla de EA Sports y el desarrollo de FIFA, por lo que podemos estar prevenidos de que lo que vamos a ver es una enorme corporación donde trabajan montones de personas con tecnología muy avanzada (Aunque seguramente en lo que más gasten sea en pagar a los jugadores de futbol para tener nombres y caras oficiales).


De todo reportaje sobre el desarrollo se puede aprender y, como se esta poniendo de moda (y seguro que en España más despues del Premio Principe de Asturias a Miyamoto) cada vez tenemos más videos con los que observar el proceso.

sábado, 26 de mayo de 2012

Unity 3.x Game Development Essentials

Otro libro más de Unity que me dispongo a leer, y es que me hice con un buen arsenal para empezar a meterme en un motor 3D que no me diera muchas complicaciones y me permitiera hacer algún día juegos sencillos e interesantes de modo que pudiera coger experiencia en la producción (ya que uno no puede aprender en empresas tendrá que hacerlo en su casa).

El volumen pertenece a la misma serie que los otros dos que comenté en el Blog, solo que esta vez se nos exige un nivel medio. (Y claro, se hacen ejemplos nuevos).

 Una introducción al mundo 3D de Unity nos prepara para la elaboración de entornos, interfaces de usuario, animaciones, partículas y todo lo básico que necesitamos saber de este genial motor, dedicando gran parte del texto a enseñarnos a programar scripts en Javascript (también algo en C#). Así, con todo esto, iremos desarrollando algunos ejemplos de los que ya mostraré algo por aquí cuando lo haya completado.

Y ahora, a seguir estudiando, que me van a pillar los exámenes en pleno E3 (hay que joderse) y queda muy poquito para acabar y espero que el verano me traiga tiempo libre o trabajo. ¡O Ambos!

viernes, 25 de mayo de 2012

Programando X – ActionScript 3: Entrada de texto

¿Qué pasa si el usuario quiere escribir su nombre para que el prota de nuestro juego se llame como él/ella? Pues que necesitaremos un cuadro de texto que permita recoger desde el teclado y almacene los datos en una variable. Esto se consigue definiendo un TextField (que ya vimos en capítulos anteriores) de tipo INPUT. De esta forma podemos indicar que cuando se pulse una tecla determinada, el cuadro de texto recoja lo que hay escrito dentro de él.

Veamos:

var texto:TextField= new TextField();
texto.text=variable; 
texto.type=TextFieldType.INPUT; 

Con estas lineas de código definimos un TextField de tipo INPUT que toma valor de una variable en la que podremos almacenar lo que recojamos por teclado.

En un programita se ve mucho mejor:

import flash.text.TextField;
import flash.events.KeyboardEvent; 

var variable:String=""; 
var texto:TextField= new TextField(); 

texto.text=variable; 
texto.type=TextFieldType.INPUT; 
addChild(texto); 
texto.x=230; 
texto.y=300; 
texto.width=200; 
texto.height=30; 
texto.border=true; 

// Ahora vamos a guardarnos lo que se escriba en el cuadro de texto en "variable" (Usaremos una funcion) 

function acceptInput(){ 
    variable=texto.text;
    trace(variable); 
    removeChild(texto); // Asi eliminamos algo de la pantalla 


// LLamemos a la funcion con un Event listener

texto.addEventListener(KeyboardEvent.KEY_UP,checkForReturn); 

// Una funcion para comprobar la pulsacion de una tecla 

function checkForReturn(event:KeyboardEvent){
    if(event.charCode==13){ 
        acceptInput(); 
   } 


La salida de este programa (ilustrada con una bonita flecha en un software de dibujo para indicaros que lo que se introduce en el cuadro de texto sale por pantalla) sería:


Donde como vemos en el código, tras importar las clases necesarias para manejarnos con textos y eventos de teclado, creamos una variable de tipo String para almacenar lo que escriba el usuario. Luego creamos un TextField de tipo INPUT y lo añadimos a la pantalla con addChild, en una x e y determinadas y con un tamaño de ancho y alto (width y height) de 200x30, poniendo tam
bién su borde negro a verdadero (border=true), para que se vea el cuadro.

Tenemos también dos funciones. checkForReturn que retorna las teclas escritas por teclado al pulsar la tecla 13 (el Enter) y acceptInput que recoge lo escrito en el cuadro de texto dentro de variable, lo muestra por pantalla y luego elimina el cuadro de texto usando la función removeChild. Bastante sencillo.

Hay un EventListener que escucha las teclas que pulsa el usuario (pero solo si el cursor esta dentro del cuadro de texto que hemos creado) y espera al Enter para recoger todo lo escrito, mostrandolo luego por pantalla. Como lo que mostramos es el contenido de una variable, si tuvieramos un juego podriamos usar ese texto que ha escrito el jugador para indicar nombres de personajes o cosas por el estilo, que queremos que se puedan personalizar en nuestro proyecto.

Y para las próximas veces quedan algunos conceptos, algún ejemplillo más y… tal vez transformar el curso de programación a Unity, que es gratis y así aprendo más sobre él yo también. :P

miércoles, 23 de mayo de 2012

Lo que ví durante esta semana

Empiezo a tener los últimos examenes y tengo mucho que hacer y poco tiempo para escribir o probar cosas, pero procuro seguir viendo reportajes o videos que tengan que ver con el desarrollo de videojuegos y seguir todas las noticias. Bien, pues durante los últimos días me he encontrado varias cosas interesantes que quería compartir:


Primero hoy nos hemos enterado de que Shigueru Miyamoto ha ganado el Príncipe de Asturias de la Comunicación, estupenda noticia en un país como el nuestro donde aun no se valora la importancía de la industría del videojuego. Poco a poco se empieza aceptar que hay mucho de cultura y negocio en el mundillo y que no estamos hablando de juguetes para niños. Sin embargo este solo es un pasito más, pues todavía se oyen muchas personas que diran a sus hijos (aquellos hijos que quieran ser desarrolladores) “dejate de juegos y estudia otra cosa que eso no da dinero”.

Segundo un reportaje de Vandal.net donde se nos cuentan algunos “secretos” que usaron las compañías desarrolladoras de algunos juegos para conseguir que todo funcionara de forma fluida en determinadas plataformas. Se habla sobre la adaptación técnica, aunque muy por encima, sin entrar mucho en detalles, ya que debía ser un reportaje que pudieran entender todos los jugones. Aún así, es muy interesante y se aprende algo de lo que podríamos encontrarnos al desarrollar para ciertos sistemas.

Por último, y relacionado con Miyamoto, he visto reportajes del desarrollo de Zelda 64 aparecidos en Unseen64.net, unidos a un interesante video con un prototipo donde se ve como probaban y mejoraran las animaciones del protagonista, Link, en este fantástico juego. A veces se ven escenarios genéricos o partes aún en desarrollo y es curioso ver como se invertía un tiempo en comprobar que todo funcionaba de forma perfecta, llegandose a comprender como Zelda 64 se hizo tan grande gracias a sus pequeños detalles.

viernes, 18 de mayo de 2012

Programando IX – ActionScript 3: Botones

Al igual que ocurría con los MovieClips, los botones son un tipo especial en ActionScript. Estan diseñados para tener 4 fotogramas que representarán las posiciones inactivo, con el ratón encima, haciendo click sobre él y levantando el boton despues de hacer click. De esta forma podemos dar un aspecto diferente a nuestro botón dependiendo de la acción del usuario, haciendolo mucho más dinámico.

De nuevo, los botones se crean instanciando objetos de su clase. Por ejemplo si hemos hecho en Flash un boton llamado myBoton, necesitaremos el siguiente código:

var boton:myBoton = new Boton(); 

Veamos un programa ejemplo:

import flash.events.MouseEvent; 

// vamos a crear un boton, aunque de momento sin animación 
var boton:Nave_Button = new Nave_Button(); 

boton.x=280; 
boton.y=310; 
addChild(boton); 

// Ahora necesitamos que se "escuche" buscando clicks sobre el boton 

boton.addEventListener(MouseEvent.CLICK, escuchaBoton); 

// Al pulsarse el boton se llama a la funcion function escucha

Boton(event:MouseEvent){ 
    trace("Has hecho click en la nave!"); 


La salida de este programa es:


Podemos comprobar como al hacer click al boton aparece un mensaje de texto. Esto se consigue creando el boton, dandole una posición x de 280, una y de 310 y, por último, añadiendolo a la pantalla con addChild. Sin embargo, necesitaremos un “evenListener”, que viene a ser un fragmento de código que hace que nuestro boton esté atento a si ocurre un evento de tipo ratón (en este caso es un click) y que si esto sucede, llame a la función escuchaBoton (creada  por nosotros mismos, no es propia de AS), en la cual imprimiremos un mensaje. Es el último trozo de código (Lo repito):

boton.addEventListener(MouseEvent.CLICK, escuchaBoton); // Al pulsarse el boton se llama a la funcion 

function escuchaBoton(event:MouseEvent){ 
    trace("Has hecho click en la nave!"); 


Así, podemos hacer que el botón reaccione al ratón y realizar las opciones que queramos como respuesta. Este evento-acción es muy importante en Flash, en el mundo de los videojuegos y el desarrollo de aplicaciones. Ocurre algo y, como consecuencia de ese algo, se da una respuesta al usuario. Por ejemplo pulsar un botón y abrir un menu, o pulsar una tecla y que nuestro protagonista salte.

Pronto más y algunas aclaraciones sobre la Programación Orientada a Objetos.

Y de momento un ejemplo de lo que se puede hacer con los conocimientos vistos hasta ahora, una calculadora sencilla (con muchas limítaciones). Como vemos, tiene botones que reaccionan a clicks del ratón y llama a funciones que escriben en la pantalla y realizan las operaciones. Tiene condicionales, variables, imprime y pone objetos en pantalla... ¡Todo lo que hemos aprendido!

Aunque no voy a explicar paso a paso como se hace por que sería largo (y el código no esta muy organizado), seguro que más de uno puede imaginar como hacer un juego donde solo haya botones, texto y algunas imágenes. Si no lo veís, pronto haremos alguno. :P

martes, 15 de mayo de 2012

Creación de música y sonido libre para tus juegos

Estaba buscando alternativas en software libre a los clásicos programas de creación músical y de creación de sonidos cuando me encontré con dos programas muy interesantes:

Sonido de juegos de 8 bits: Con sfxr podremos generar ondas de distinto tipo y configurarlas de formas muy diversas. Gracias a esto seremos capaces de crear sonidos al estilo de los clásicos juegos de 8 bits (incluso yo creo que siendo un poco manitas y recurriendo a programas más avanzados con los que retocar el sonido obtenido, podremos lograr cosas más actuales). Podemos decidir el tipo de onda: cuadrada, en sierra, ruido o sinusoidal y comenzar a tocar botones, o por el contrario partir de un sonido predefinido para el salto, la colisión, explosión, etc.

Hay un par de botones interesantes (randomize y mutate) con los que generar sonidos al azar y, por supuesto, botones donde guardar, cargar y decidir la calidad de sonido con que guardaremos el archivo final.


Música: Hydrogen es un software de composición músical parecido al conocido FL Studio. Se basa en samples (muestras o fragmentos de audio con los que haremos sonar “instrumentos”), patrones y algunos módulos con los que configurar la salida final del audio. Básicamente introducimos los instrumentos y los hacemos sonar en un momento concreto y con una intensidad definida dejandolos grabados en un patron que podemos luego copiar y cambiar cosillas para que suene distinto. También podemos crear patrones nuevos cada vez, claro está. Pero básicamente la idea de esto es tener un patron que repetir cuando queramos para crear nuestra canción. Por ejemplo empezamos con bateria, luego guitarra, y luego el patron de guitarra y bateria juntos repetidos para crear una melodia con ritmo que va cambiando… (Bueno, no es facil de explicar, hay que probarlo).


En resumen merece la pena servirse de este tipo de programas que no requieren inversión para ahorrar costes en nuestro desarrollo. Son sencillos de aprender tocando botones y se pueden conseguir resultados aceptables con un poco de habilidad. No hay que olvidar que una parte muy importante de cualquier videojuego es la sonora, donde incluimos la música y los efectos de sonido.

jueves, 10 de mayo de 2012

Probando modelos 3D en un motor (Unity)

Estos días me he entretenido en la idea de crearme un sencillo visor de modelos 3D en Unity con los conocimientos que tenía, así que, pensando unas teclas para mover la camara y otras para rotar el objeto, por fin podía ver un render en tiempo real de los elementos que he ido creando en mis años de artista 3D. Mi intención ahora es mejorarlo cuando pueda, e incorporar la opción de hacer un visor de escenarios (donde nos podamos pasear en primera persona), que sería muy sencillo, y otro para las animaciones, que además, me ayudaría a meterme más en el arte de animar en 3D (que lo tengo bastante abandonado).

El motivo de todo esto es mejorar mis habilidades como modelador y texturizador, probando todo lo que vaya haciendo en el motor que tengo pensado usar para los juegos poligonales que pueda crear, que no es otro que Unity.

Puedo comprobar como reaccionan los objetos, personajes y escenarios ante las luces, y detectar fallos que puedan ocurrir en las zonas de unión de las texturas, los shaders, poligonos sin soldar, etc. Así, al corregir errores quizá aprenda a ver donde meto la pata habitualmente y, cuando participe en algún proyecto sea más habilidoso y conozca donde suele dar problemas la creación de arte para juegos.

Quizás cuando sepa algunas cosas más pueda mejorar todo y hacer que el objeto gire haciendo clic y arrastrando con el ratón, añadir luces en tiempo real, cambiarles el color… También es echarle tiempo. :P

martes, 8 de mayo de 2012

Programando VIII – ActionScript 3: MovieClips

Los MovieClip son una clase de objetos que usa ActionScript para generar peliculas Flash y que ya tiene una serie de propiedades con las que podemos cambiar su tamaño, posición, rotación, etc. Son algo así como contenedores donde podemos meter gráficos estáticos o animados (tienen su propia linea de tiempo para incluir fotogramas en Flash), así que son perfectos para crear videojuegos.

Imaginemos un MovieClip que contiene el gráfico de una nave y que, al pulsar las teclas de dirección, podemos hacer que cambie su posición en cada fotograma para que nos cause la sensación de que se está desplazando. ¡Videojuegos!

¿Cómo creamos un MovieClip?

Generando una instancia del tipo MovieClip a través de Flash (bajar una versión de prueba en esta dirección y podremos trabajar con ella una temporada) y haciendo que este disponible para ActionScript desde el inicio. Después vamos a crear una instancia (una copia) del MovieClip que acabamos de crear usando el operador new, y por ultimo, usaremos addChild para añadirlo a la pantalla.


var myMovieClip:MC_nuevo = new MC_nuevo(); 
addChild(myMovieClip); 

Vamos a ver como poner unas cuantas naves en pantalla (El gráfico es mío, podeis usar cualquiera que tengais por ahí).

 // Referirnos a propiedad de una instancia -> nombre instancia con punto y su propiedad 

//Si definimos el MovieClip como accesible podemos usar su codigo para crear copias 
var nuevaNave:MC_Nave = new MC_Nave(); 
addChild(nuevaNave); // addChild hace visibles las copias en la pantalla 

// Ahora cambiamos sus propiedades 

nuevaNave.x=100; 
nuevaNave.y=200; 
nuevaNave.rotation=90; 

 // Para crear muchos objetos sin demasiado código tenemos los bucles 

var contador:Number=5; 
    while (contador>0){ 
        var otraNave:MC_Nave = new MC_Nave(); 
        otraNave.x=50*contador+50; 
        otraNave.y=50*contador; 
        otraNave.scaleX=contador*.2; 
        otraNave.scaleY=contador*.2; 
        addChild(otraNave); 
        contador--; 


La salida sería la siguiente:


Donde como vemos, tenemos un objeto MovieClip que pone nuestra nave en pantalla y nos permite cambiarle el tamaño, rotarla o situarla en distintos puntos de la pantalla con tan solo cambiar los valores de sus propiedades que, entre otras, son:

rotation -> para la rotación.
x -> para la posición horizontal de la nave.
y -> para la posición vertical de la nave
scaleX -> para la escala horizontal
scaleY -> para la escala vertical.

Como vemos en el while, tambien podemos hacer cuantas copias queramos de nuestro MovieClip, de nuevo usando el operador new.

Pronto otros tipos importantes de objetos en ActionScript: Botones y Graficos.

miércoles, 2 de mayo de 2012

Juegos que me influyeron como desarrollador XIII: TimeSplitters


Al igual que me pasaba con Starcraft, pasé gran cantidad de horas con el editor de niveles (o más bien LOS editores de niveles) de TimeSplitters 2 y 3 de la consola GameCube de Nintendo. Probaba los distintos tipos de iluminación, colocación de enemigos, interruptores, el modo de diseño básico y el avanzado… Siempre tratando de aprender lo máximo posible de cómo estaban diseñados aquellos juegos tan fantasticos. Por que además de su influencia en mi vida como desarrollador, o futuro desarrollador para ser más exactos, estos títulos me impresionaron como jugador por su enorme cantidad de contenido y su humor lleno de monos, guantes que disparan, zombies, muñecos de nieve y un largo etc de personajes absurdos.

Nunca he podido jugar al primer título de la saga, pero disfruté de lo lindo de los ya mencionados TimeSplitters 2 y 3 desarrollados por Free Radical Design, en los que las partidas multijugador (con la pantalla partida) llenaban tardes de disparos entre amigos y familiares, como mi hermano o mi primo, con los que además colaboraba para conseguir todos los trofeos del juego, que eran realmente complicados de lograr. Que si hay que disparar a unas sandias que transportan unos monos sin darles a los simpáticos animalillos, que si hay que matar a zombies envueltos en llamas antes de que lleguen hasta nosotros y nos quemen, que si un trofeo por jugar nosecuantas horas, que si otro por completar el juego en el nivel dificil… Vamos que todo junto alargaba la vida del título enormemente y hacían al usuario sentirse satisfecho de su compra.

Los personajes y escenarios eran muy variados y nos daban la posibilidad de enfrentarnos en partidas contra bots (personajes controlados por la máquina) agrupados en, por ejemplo, robots malvados, zombies o mujeres hermosas, en una gran variedad de modos de juego como capturar la base enemiga, monos protectores, mayor número de muertes…

Es cierto, que aun no he contado que tipo de juego es TimeSplitters. Pues se trataba de un Shooter en primera persona de los que marcaron una época y que, en su modo historia, narraba como unos malvados alienigenas llamados Timesplitters hacían sucumbir civilizaciones de distintos planetas mediante cambios en su pasado (viajando en el tiempo) y un grupo de heroes se enfrenta a ellos cuando le va a tocar el turno a la tierra. Para detenerlos, la clave estará en unos cristales que pueden abrir portales del tiempo. Jugaremos así con distintos personajes y en distintas épocas en las que tendremos que detener el avance de estos molestos seres.

Su editor de niveles: Genial, sencillo y muy completo.