Wie verwirkliche ich einfache 2D Animation?
-
Hallo, ich habe ein Spiel Projekt, das aus mehreren Funktionen besteht. Es benutzt die SDL Bibliothek. Eine der Funktionen liest eine Textdatei aus, und füllt anhand der Informationen eine Variable vom Typ SDL Surface mit kleinen Bildchen, die zusammen den Spielhintergrund darstellen. Andere Funktionen übernehmen die Maus und Tastatur Überwachung, oder ermöglichen das "laufen" in dem sie den Sichtbereich neuzeichnen. Das alles funktioniert.
Nun möchte ich die Bildchen die Wasser darstellen in so fern animieren, das ich sie alle 0,5 sekunden durch ein geringfügig verändertes Bildchen ersetzten lassen wil.
Ich habe das bereits versucht zu realisieren, in dem ich einen Timer eingebaut habe, der alle 0,5 Sekunden, durch eine berechnung alle in frage kommenden bildchen innerhalb der Variable welche sie Speichert, errechnet, und danach per for schleife den bereich durch geht der relevant ist, und die in Frage kommenden Bildchen innerhalb der Variabel umschreibt, und neu zeichnet.
Leider funktioniert das bei mir nicht, nicht das eine Fehlermeldung kommt, aber wenn die Funktion per Timer ausgeführt wird, verhält sich mein Computer so als würde ihn das maslos überfordern (amd xp 3000....)
hat jemand ne ahnung wie man so eine 2d animation implementiert. Und kann das sein das es nen heutigen pc in die knie zwingt wenn er alle 500 ms so ca 1500 variabeln durchgehen muss, und ca 200 bildchen neu zeichnen muss?
Ich hoffe mein Problem verständlich geschildert zu haben, und darauf das mir jemand weiterhelfen kann.
-
Die von dir beschriebene Variante ist mehr oder weniger die Standardmethode, um Animationen darzustellen.
Wegen der Performance: Was Schnelligkeit anbelangt, ist SDL extrem schlecht. Gut möglich, dass es daran liegt. Wie siehts denn aus, wenn du z.B. nur ein Bild neu zeichnest?
-
Nexus schrieb:
Wegen der Performance: Was Schnelligkeit anbelangt, ist SDL extrem schlecht. Gut möglich, dass es daran liegt.
Seit wann?
Und selbst wenn die Performance von SDL mal nicht optimal ist: Daran liegt es wohl kaum, es sei denn, myraezel geht irgendwie falsch mit SDL um.myraezel: Kannst Du Dein Programm nicht einfach mal durch einen Profiler durchjagen? Der sagt Dir dann, wo das Programm seine Zeit verbringt.
-
ich kenne den debugger , aber von einem profiler habe ich noch nix gehört. Liegt wohl an meiner Unwissenheit. Ich benutzte den Borland C++ Builder 6.0. Ist da ein Profiler implementiert?. Wenn nicht wo bekommt man sowas.
-
ich kenne den debugger , aber von einem profiler habe ich noch nix gehört. Liegt wohl an meiner Unwissenheit. Ich benutzte den Borland C++ Builder 6.0. Ist da ein Profiler implementiert?. Wenn nicht wo bekommt man sowas.
-
Ein Profiler ist ein Tool, das es ermöglicht, Programme auf Performance zu analysieren. Man kann z.B. schauen, wie lange wo Zeit verbraucht wird, um zu optimieren.
Ich kenne den C++ Builder nicht, aber du könntest zum Beispiel AMD CodeAnalyst zum Profilen verwenden, der ist kostenlos.
-
sdl ist langsam, aber so langsam sollte es dann doch nicht sein. kannst du mal den relevanten code (bitte keinen 500 zeiler] auf www.rafb.net hochladen? in mir kriecht die vermutung hoch, dass du die bilder bei jedem framedurchgang neu lädst.
-
danke, das werde ich sofort machen.
dies ist der link unter dem ich den code hochgeladen habe.
schon eher lächerlich...., hier ist er URL: http://rafb.net/p/o5MpaY97.html
-
picbuffer = SDL_LoadBMP("C:/map2/boden12.jpg");Oehm also wenn das bei jedem 2. Durchgang durchgefuehrt wird duerfte das zumindest nicht zum schnelleren Ablauf beitragen...
-
Zum Profiler: Der gcc hat einen integriert, steig mal auf Codeblocks um zur Not, der hat sogar einen analyzer dabei um den output deines Programms dann zu analyisieren.

Alternative für SDL wäre unter Windows HGE. Ist eine verdammt gute und einfach zu benutzende 2D-Engine. Leider nur für Windows weil sie DirectX benutzt.
Edit: Und wie der Vorposter schon andeutete: Lade alle Bilder auf einmal ins Programm und wechsle dann nur das Bild. Das geht schneller....
lg
-
Scorcher24 schrieb:
Alternative für SDL wäre unter Windows HGE.
Oder SFML, diese Grafikbibliothek finde ich sehr benutzerfreundlich

-
C/C++ Code:
picbuffer = SDL_LoadBMP("C:/map2/boden12.jpg");Oehm also wenn das bei jedem 2. Durchgang durchgefuehrt wird duerfte das zumindest nicht zum schnelleren Ablauf beitragen...
ah, ist das so? dann änedr ich das mal ab. ich sag gleich mal bescheid obs was gebracht hat.
-
myraezel schrieb:
C/C++ Code:
picbuffer = SDL_LoadBMP("C:/map2/boden12.jpg");Oehm also wenn das bei jedem 2. Durchgang durchgefuehrt wird duerfte das zumindest nicht zum schnelleren Ablauf beitragen...
ah, ist das so? dann änedr ich das mal ab. ich sag gleich mal bescheid obs was gebracht hat.
Joa, wenn das Bild erstmal von der Platte in den Speicher geladen werden muss, nimmt das schon mehr zeit weg als wenn das Bild schon geladen ist

Solange es aber nur ein Bild ist und dieses nicht recht klein ist, dürfte sich das nicht so extrem auswirken, aber trotzdem sollte es nicht sein
-
vorsichtig ausgedrückt, scheint es genau daran gelegen zu haben, ich habe das laden des bildes ausgelagert, in eine eigene variable, die nicht neu beladen werden muss, und es scheint zu funktionieren.
danke erstmal, ich werde mich weiterhin melden wenn ich fragen habe. soll ich dazu dann hier weiterschreiben, oder einen neuen thread eröffnen, also wenn die neue frage nix mehr hiermit zu tun hat?
-
na wenn's ein anderes Thema geht, also nix mehr mit dem Titel hier zu tun hat, ist ein neuer Thread besser
