2009-06-12 19 views
1

Vielleicht nicht wirklich groß, aber einhundert Frames oder so. Ist die einzige Möglichkeit, es zu laden, indem Sie ein Array erstellen und jedes Bild einzeln laden?Gibt es eine bessere Möglichkeit, eine große Animation zu laden?

load_image() ist eine Funktion, die ich gemacht habe, die die Bilder lädt und ihre BPP konvertiert.

expl[0] = load_image("explode1.gif"); 
expl[1] = load_image("explode2.gif"); 
expl[2] = load_image("explode3.gif"); 
expl[3] = load_image("explode4.gif"); 
... 
expl[99] = load_image("explode100.gif"); 

Scheint, wie sie ein besserer Weg sein sollte .. hoffe ich zumindest.

Antwort

1

Eine übliche Technik ist spritesheets, in dem ein einzelnes, großes Bild in ein Raster von Zellen unterteilt ist, , wobei jede Zelle ein Bild einer Animation enthält. Oft werden alle Animationsframes für jedes Spielobjekt auf einem einzelnen, manchmal riesigen Sprite-Blatt platziert.

+0

Dies ist wahrscheinlich der beste Weg auf lange Sicht, wenn die Anzahl der Frames ziemlich groß ist (sagen wir über, 15) – Skurmedel

+0

Ich dachte über Sprites nach, aber ich war mir nicht sicher, ob sie immer noch der beste Weg waren Iteration und Ausschneiden von SDL_Surface. Das ist also immer noch eine gute Möglichkeit, etwas zu tun, das ... 50 Frames Animation hat? – Justen

+0

Im Grunde läuft etwas über die Daten in der Animation. Die SDL_BlitSurface-Funktion macht dies sehr effizient. Ich habe diese Technik gesehen, um Sprites mit mehr als 200 Frames zu verwenden. Es gibt keinen besonderen Grund, warum Sie nicht noch mehr verwenden könnten. – SingleNegationElimination

1

vielleicht Ihre Beladung mit einer Nutzenfunktion vereinfachen, die für jede Iteration einer Schleife einen Dateinamen bildet:

LoadAnimation(char* isFileBase, int numFrames) 
{ 
    char szFileName[255]; 
    for(int i = 0; i < numFrames; i++) 
    { 
     // append the frame number and .gif to the file base to get the filename 
     sprintf(szFileName, "%s%d.gif", isFileBase, i); 
     expl[i] = load_image(szFileName); 
    } 
} 
+0

Danke für den Code, werde ich wahrscheinlich für dieses erste Programm, das ich mache. – Justen

1

Anstatt als Raster zu laden, stapeln Sie alle Bilder in einem vertikalen Streifen (dasselbe Bild). Dann müssen Sie nur wissen, wie viele Zeilen pro Frame und Sie können einen Zeiger auf den Frame-Zeilen-Offset festlegen. Sie haben immer noch zusammenhängende Scanzeilen, die direkt oder trivial in separaten Bildern angezeigt werden können.

Verwandte Themen