sábado, 28 de abril de 2012

Rounded Soccer

Rounded Soccer es el nuevo nombre del proyecto "minisoccer". Me he puesto a diseñar y ampliar este proyecto seriamente en mi tiempo libre. Se pueden ver mejoras gráficamente y más adelante crearé un nueva sección donde iré poniendo información sobre su progreso.


A pesar de mi escaso conocimiento en los programas de diseño de gráficos vectoriales (o debería generalizar en el diseño de gráficos), he conseguido un resultado aceptable. Se han añadido todos los equipos de la pasada copa del mundo y un menú de selección.



Todavía queda mucho por hacer, pero intento avanzar rápido cuando tengo tiempo.

miércoles, 18 de abril de 2012

Ser un Game Designer

Para todos los emprendedores en la materia, un video que te marca los pasos a seguir o que destroza tus sueños si pensabas que era muy fácil.


Te has llevado una decepción? No desistas, crea tus pequeños proyectos y trabaja en ello como un hobby. Se constante y quizás salga alguna oportunidad para triunfar. Muchos lo hacemos.

Personalmente llegué al límite cuando dbzbx fué lanzado, es cierto que tuvo más éxito del que imaginé (probablemente más de 1 millon de usuarios), pero tambíen tengo que decir que no obtuve absolutamente nada a cambio. Es cierto que coloqué un botón de donaciones etc... no ha habido nunca actividad, pero nunca sentí la satisfacción de recibir miles y miles de mensajes de gratitud. =)

Descargas
Softonic:747.627
Uptodown: 797.832
Programas-gratis.net:167.488
ABCdatos:34.302
TodoProgramas:32.282
...
TOTAL1.779.531

Sumamos en total más de 1.600.000 descargas sin contar otras muchas páginas o las distribuciónes de terceros (usuarios) mediante hostings y foros donde se consigue más tráfico.
Hablamos de gran cantidad de descargas y una valoración media de 8.5/10 aproximadamente.

Saqué valiosas conclusiones para los próximos proyectos, no es fácil ganarse la vida en el mundo del software y menos aún si no se tiene cierto prestigio.


Actualización dia 15/05/2016
Softonic:2.388.243
Uptodown: 1.395.706
Programas-gratis.net:216.050
ABCdatos:37.378
TodoProgramas:34.182
...
TOTAL 4.071.559

miércoles, 4 de abril de 2012

Cuestiones de FPS

Dado la pequeña modificación que hice en uno de los proyectos (concretamente en el de minisoccer), me gustaría comentar el tema del control de tiempo en las aplicaciones a tiempo real.

Hasta ahora, siempre había hecho uso de una determinada velocidad constante de juego y FPS. Es decir, el simple bucle que en cada iteración hace un "sleep" si dicha iteración se realiza en muy poco tiempo. Esto nos asegura que el juego se reproduzca a la misma velocidad en cualquier ordenador (no es del todo cierto), pero el renderizado se realiza las mismas veces que la física del juego.

const int FPS = 60;
const int DT = 1000 / FPS;
int lastTime, frameTime;

bool running = true;
while (running) {
    lastTime = getTicks();

    update();
    render();

    frameTime = getTicks() - lastTime;
    if (frameTime < DT)
        sleep(DT - frameTime);
}

Pero de este modo, limitamos las capacidades de un buen hardware cuando seguramente podría ser capaz de ejecutar el juego a una velocidad mayor. Por eso a menudo los programadores usan el tiempo de cada frame (frameTime) para actualizar la física usando lógicas parecidas a esta:

x = x + speed * frameTime

Así se aplica la integración de Euler. Pero no es eso a lo que quiero llegar. Gracias a los excelentes artículos publicados en esta y esta otra página web podemos llegar a implementar un bucle en el que la velocidad del juego es totalmente independente de los FPS. En ese caso la física podríamos calcularla 25 veces por segundo (está estudiado que generalmente es suficiente, incluyendo chequeo de collisones etc.) mientras que el renderizado se realiza en cada frame.

No voy a entrar en la implementación ya que no tiene mucha complicación y las fuentes aportadas tienen suficiente información para entenderlo (en inglés). Cabe destacar que en la renderización se hace uso de un nuevo valor que se usa para interpolar la posición correcta de las instancias y así se consigue una animación realmente suave. Yo mismo he conseguido un excelente resultado asi que animo a hacer uso de este método a todo programador, cualquier duda podeis consultarmelo.

Fuentes:
Koonsolo
Gafferongames

P.D: Las dos páginas usan métodos distintos para calcular el valor usado para la interpolación; personalmente prefiero el método usado por gafferongames que calcula dicho valor mediante el uso del estado anterior y actual de las instancias.