Originariamente inviato da GhostFire
Ciao a tutti,
sto continuando il mio progetto in DirectX...
praticamente sto creando un sistema per creare sprites animate..
La classe degli sprite animati è questa:
codice:
public string AnimationName = null; // nome animazione
public int FrameID = 0; // Frame selezionato
public int[] FrameDuration; // Durata di ogni frame
public SpriteFlags flag = SpriteFlags.AlphaBlend;
public Sprite Frame; // Frame visualizzato
public Texture[] textureSequence; // sequenza dei frame
public int[] XY_Position = { 0, 0 };
public int AnimationSpeed = 1; // velocità animazione
Io adesso dovrei fare in modo che passato tot tempo il valore FrameID aumenti...in modo da passare alla seconda immagine..per fare cio' ho fatto questo:
codice:
public static void playAnimation(SpriteAnimation s_anim)
{
int time = 0;
while (time <= s_anim.FrameDuration[s_anim.FrameID])
{
Console.WriteLine(time.ToString() + "/" + s_anim.FrameDuration[0]);
time = time + s_anim.AnimationSpeed;
if (time >= s_anim.FrameDuration[s_anim.FrameID])
{
s_anim.FrameID++;
time = 0;
}
}
}
Quello che dovrebbe fare questa funzione è questo:
mentre (variabile tempo è minore o uguale alla variabile DurataFrame[frame selezionato])
aumenta la variabile tempo.
Se la variabile tempo corrisponde alla durata massima del frame selezionato allora:
-passa al frame successivo
-resetta il contatore del tempo
Non capisco perchè non funzioni...praticamente mi salta il secondo frame e va direttamente all'ultimo..