Animation aus 36 .png Bildern.



  • Ich hab 36 png-Bilder, und ich würde diese gerne zu einer Animation zusammenfügen, wie kann ich das am besten machen? Die Bilder sind durchnummeriert, kann ich die Irgendwie Funktional Laden?



  • Ja.

    (Eine spezifischere Antwort kann ich dir nicht geben, weil du ja weiter nichts verrätst, z.B. welche Bibliotheken du benutzt ...)



  • Bilder laden und in ein Array tun. Dann im Array die gewünschte Animationsphase als Index nehmen. f'`8k

    Gruß, TGGC (\-/ has leading)



  • Am Besten du bastelst dir ne Klasse für die Bilder und schmeißt dann alle 36 in nen vector der Klasse...
    Und die Klasse hat dann eben Methoden wie Load(), Draw(),...usw...



  • is schnona recht hilfreich danke, meine idee, alle Bilder aus ein Surface zu blitten, und dann von da immer den entsprechenden Abschnitt heraus aus den Bildschirm zu blitten hat irgendwie nicht ganz geklappt. Gibt es eingentlich eine Möglichkeit alle Billder (die sind durchnummeriert) funktional zu laden, also mit einer Schleife? Bei mir sind die noch alle in einem Zeilenblock untereinander geschrieben.

    PS: Ich arbeite mit C++, und nutze eingentlich nur standardzeu als header (ausser die SDL teile)



  • Du kannst entweder Surfaces verwenden oder LPD3DXSPRITE ( was eher zu empfehlen ist ⚠ )

    Damit legst du eine Klasse cBild an die Methoden zum Laden und Darstellen des Bildes hat...
    Dann erzeugst du daraus eben mit vector ein array und kannst somit sowas kreieren:

    Pseudocode:

    const int num=36;
    vector<cBild> Bilder;
    Bilder.resize(num);
    for(int loader=0;loader<num;loader++)
       Bilder[loader].Load("Bild_?.bmp",x,y);
    

    EDIT: Verdammte Code-Tags



  • "Bild_?.bmp" bleibt doch noch "Bild_?.bmp", kann ich da nicht irgendwie die nummer des Bildes einbauen? So viel ich weiß kann man doch auch strings miteinander addieren, gibt es da auch eine Möglichkeit das Format zu ändern? Also sowas z.B. IMG_LOAD("Bild_" + i +".png"), und i in der Genauigkeit von 4 stellen (z.B. so 0001, 0002, 0003, ...);

    Was ist LPD3DXSPRITE? DX könnte Direct X bedeuten ---> Ich hab Linux auf dem rechener ---> DX nicht verfügbar
    aber eine Klasse für die Verwaltung meiner Bilder schreib ich mir sowiso immer selbst (Datenkapselung ist mir sehr wichtig).



  • Ja, kannst du:

    char buffer[30];
    for (i=0;i<30;i++)
    {
      sprintf(buffer, "Daten/bild_%i.bmp", i);
      LadeDatei(buffer);
    }
    

    Oder halt umschreiben je nach LadeFunktion und Bilderzahl, auf jeden fall sollts mit sprintf gehen.



  • Bild_?.bmp
    

    ➡ Das "?" bezog sich darauf dass du da die entsprechende Zahl einfügen musst...am Besten mit einer Schleife( wie von DaGeRe beschrieben).



  • Nicht für ungut, aber ich bevorzuge C++ quelltext, also eher sowas:

    cout << right << setw(4) << setfill('0');
    cout << "bild_" << i << "".png" << endl;
    

    da ist dann auch das Problem mit den vorangehenden Nullen gelöst.

    So nun müsste da auf dem Bildschirm genau das stehen, was ich brauche, nur wie packe ich das auf einen string?



  • Mit stringstreams. f'`8k

    Gruß, TGGC (\-/ has leading)



  • Codebespiel? Link mit Erklärung?




Anmelden zum Antworten