lunes, 2 de julio de 2012

Programación: Skills

Se trata de una palabra que significa algo así como “habilidades” o “técnicas” y que usaba a menudo cuando formaba parte del mundo músical y de la cultura de los Djs de Hip hop.

Básicamente uno aprendia una serie de técnicas o skills y las combinaba para crear acompañamientos sonoros en las canciones o hacer música a partir de sonidos. Habia que practicar durante meses en muchos casos, para dominar estas habilidades y conseguir añadirlas a nuestro repertorio. Además, cuando uno mejoraba lo suficiente era capaz de inventar y desarrollar sus propias técnicas.


En los videojuegos sucede una cosa similar, tanto para programadores como para artistas, diseñadores, guionistas…, y es que hay una serie de habilidades que debemos tener en nuestro repertorio. Estas nos permitiran desarrollar nuestros proyectos y, cuando seamos lo bastante buenos, desarrollar nuestros propios métodos de solucionar los problemas que nos vayan surgiendo durante la producción.

Con el tiempo, en el Blog, me gustaría mostrar algunas técnicas que suelen ser de uso común y que se repiten en el mundillo, por lo que nos conviene conocer, ya que la forma en la que se resuelven muchos géneros o mecánicas hace tiempo que esta inventada y perfeccionada. Espero que a los lectores les sirva. A mi no me viene mal tenerlo aquí como recordatorio.

Empecemos por programación:

Animación basada en el tiempo

Cuando el framerate de un juego puede variar por que estamos ejecutandolo online o simplemente por que hay muchos cambios en pantalla con los que el procesador no puede, no conviene fiarnos de que las actualizaciones a nuestra pantalla de juego se realicen fotograma a fotograma. Por eso es muy útil usar la animación basada en el tiempo.

Explicado con ActionScript, un ejemplo sería:

Primero creamos una variable que guarde el tiempo del ultimo paso (el tiempo que tarda en ejecutarse el fotograma).

var ultimoPaso:int=getTimer();

Usaremos esto para indicar a nuestro gráfico cuanto debe moverse enun periodo de tiempo. Para ello en cada fotograma hay que realizar una serie de acciones para nuestro gráfico en movimiento.

var tiempoDiff:int=getTimer()-ultimoPaso;
ultimoPaso+=tiempoDiff;
objeto.x=tiempoDiff*.1;

En ActionScript podemos hacer eso mediante una función que se ejecute en cada evento ENTER_FRAME. Calculamos la diferencia de tiempo y preparamos la variable ultimoPaso para el paso siguiente, Luego modificamos la variable x de nuestro objeto añadiendole tiempoDiff multiplicado por 0.1 (Así, en este caso el objeto se mueve 100 pixels cada 1000 milisegundos). Si en 1 milisegundo se mueve 0.1 pixeles, se moveran 100 en 1000 milisegundos. (Una sencilla regla de tres).

Customizar cursores

Cuando desarrollamos usando motores para juegos normalmente hay un cursor definido que tiene su posición x y su posición y. Podemos usar esto para ocultar este cursor y sustituirlo por la imagen que queramos simplemente igualando en cada fotograma la posición x, junto con la posicion y, a la que tendría el cursor del ratón. Muy sencillo.

Mouse.hide();

imagen.x=mouseX;
imagen.y=mouseY;

Números al azar

Suele haber una función para generar números aleatorios en todos los lenguajes de programación. Por ejemplo en ActionScript tenemos Math.random. Esta funcion devuelve un numero entre 0.0 y 1.0, por lo que tendremos que servirnos de algunos trucos para generar, por ejemplo, la tirada de un dado que esta entre 1 y 6. Para conseguir esto multiplicamos.

var aleatorio:Number=Math.random()*6;

Como queremos numeros enteros habra que redondear

var aleatorio:Number=Math.floor(Math.random()*6);

Por último como no queremos que pueda salir el cero, le sumaremos 1 al resultado.

var aleatorio:Number=Math.floor(Math.random()*6)+1;

Como en el rángo entre 0.0 y 1.0 no se incluye el límite 1.0, el sumar 1 no es un problema, seguiremos moviendonos entre el 1 y el 6

Espero que se entienda todo. Próximamente más.


No hay comentarios:

Publicar un comentario