Anuncios Google

No consigo animar sprites con vel>nºframes [resuelto]

Buenas,

me estoy escribiendo un algoritmo general para que un sprite se anime indefinidamente. Me funciona con cualquier parámetro que le pongo, SALVO cuando la velocidad (en frames por segundo) es mayor que el número de frames en el que se anima. En tal caso el sprite no se anima.

Llevo toda la tarde y no sé en qué puede fallar la cosa (realizo los cálculos mentalmente y me da correcto).

//frames es un número que aumenta indefinidamente.
//nframes es el número de frames de la animación.
//frstframe es el número del primer frame de la animación.
//lstframe es el número del último frame
//velframe es la velocidad de la animación (en frames/segundo)
//framespersecond indica el valor que debe tener frame para cambiar de frame
//(ej: a 2 f/s cambiaría de frame cuando frame vale 30 (frame obtiene 60 valores al segundo)
//actualframe indica en qué frame de la animación estamos (valor inicial=0)
 
void SpriteAnime(u8 screen, u8 id, u8 frstframe, u8 lstframe, u8 velframe)
{
	frames++;   //frame aumenta 60 veces al segundo
	u32 nframes=(lstframe-frstframe)+1;
	u32 framespersecond=60/velframe;
	if(frames==(framespersecond*(actualframe+1))-1)	actualframe++;
	if(frames>=(nframes/velframe)*60)	frames=0;
	if(actualframe>(nframes-1))	  actualframe=0;
 
	NF_SpriteFrame(screen,id,(actualframe+frstframe));
}

Añado comentarios para que sepais qué hace cada variable.

Yo no consigo averiguar qué puede fallar, a ver si vosotros veis lo que yo no logro ver...

Salu2, y gracias por la ayuda.


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de kNightFox

En pseudo codigo

En pseudo codigo seria...

delay = 0;
speed = 0;
frame = 0;

delay ++;
if (delay >= (60 / speed)) {
  delay = 0;
  frame ++;
  if (frame > maxframes) frame = 0;
  NF_SpriteFrame(screen, id, frame);
}

Es tonteria velocidades mayores de 60fps, dado que la DS NO LOS TIENE.
 
A ver si eso te orienta.


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de exterminator

Muchas gracias

Me ha servido para aclararme varias cosas, muchas gracias.

Salu2

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.