SDL Bilder drehen



  • Moin! 🙂

    Wir haben mitlerweile eine ganze menge bilder für unser projekt. und da haben wir uns gedacht wir packen die alle zusammen auf ein großes und lesen immer bereiche aus. (also ein 410x410 bild wo 100 41x41 bilder drauf sind.

    dafür speichern wir dann immer unterschiedlcihe startpositionen weg. sd00, sd01... etc

    SDL_Rect sd00;
        sd00.x = 0; sd00.y = 123; sd00.w = 41; sd00.h = 41;
        sdl[2][0] = &sd00;
    

    Frage 1:
    der sdl[][] array ist ein voidpointer.. weil wir nicht wissen welcher typ z.b. die SDL surface hat, und wir nicht 20 einzelinformationen an funktionen weiter geben wollen. gibt es eine bessere möglichkeit alle SDL informationen zwei funktionen tiefer zu bringen?

    Frage 2:
    Bilder drehen...
    wir nutzen die rotozoomSurface(); funktion um unsere creeps, türme oder geschosse zu drehen. aber wie machen wir das wenn wir diese auch auf das große bild 410x410 packen wollen?
    weil ich gebe der funktion ja das große bild, sag ihr sie solls um xy grad drehen und suche mir DANN meinen bildbereich...

    danke im vorraus 🙂
    wenn die Towerdefence fertig ist kann ich das programm hier ja gerne mal veröffentlichen, ist nichts großes aber ganz hübsch anzusehen^^



  • cl90 schrieb:

    also ein 410x410 bild wo 100 41x41 bilder drauf sind.

    100 ?
    Meinst du nicht 10 41x41 Bilder ?



  • @Sheldor: 10 * 10 ist hundert und nicht 10. 😉



  • Ethon__ schrieb:

    @Sheldor: 10 * 10 ist hundert und nicht 10. 😉

    Er will 100 41x41 Bilder auf ein 410x410 Bild, oder habe ich etwas falsch verstanden ?

    * Edit
    Müsste das Bild dann nicht 4100x4100 gross sein ?



  • 10 Bilder in die Breite, 10 Bilder in die Höhe. 10 * 10 = 100

    Testfrage: Wie viele 5x5 Quadrate passen in ein 10x10 Quadrat?



  • Ethon__ schrieb:

    Testfrage: Wie viele 5x5 Quadrate passen in ein 10x10 Quadrat?

    4

    *edit
    Sorry ich dachte die Bilder sind 41x41 gross....
    Man bin ich blöd 😃

    * edit2
    Zu Frage 2 kannst du die Funktion rotozoomSurfaceXY() nutzen.

    rotozoomSurfaceXY (SDL_Surface *src, double angle, double zoomx, double zoomy, int smooth)
    

    Hoffendlich irre ich mich nicht schon wieder. 😃



  • danke schonmal dafür.
    also die rotozoomXY geht soweit nicht. zumindest nicht so einfach wie ich das dachte.

    magst du nochmal drüber schaun ob ich das falsch mache?

    SDL_Rect sc00;
        sc00.x = 0; sc00.y = 165; sc00.w = 41; sc00.h = 41;
        sdl[1][2] = &sc00;
    
        	    rota = rotozoomSurfaceXY(sdl[0][4], deg(floatdata[0][i][2],floatdata[0][i][3]), 0, 165, 0);
        	    SDL_BlitSurface(rota, sdl[1][2], sdl[0][0], &destc);
    

    sdl[0][4] ist das große 410x410 bild.
    das bild das ich ausprinten möchte fängt bei x= 0 und y=165 an. und hört dann natürlich +41 in beide richtungen auf.
    aber ich seh einfach nichts wenn ich das so nutze. sprich, die koordinaten führen irgendwie ins leere 😞

    gibts vlt einen Teamspeak oder so? ich würd so gern kurz mit jemandem darüber reden, oder allgemein über SDL reden. wäre wirklich super 🙂



  • Versuchs damit hab gerade nicht viel Zeit:

    void rotozoomSurfaceSize (
                int orig_width, int orig_height, 
                double winkel, double zoom, 
                int *ziel_width, int *ziel_height);
    


  • die rotozoom funktionen können das nicht.

    ich müsste quasi aus dem großem bild den bereich rausnehmen, den als eigenes bild definieren und dann rotozoomen. geht das?



  • cl90 schrieb:

    die rotozoom funktionen können das nicht.

    ich müsste quasi aus dem großem bild den bereich rausnehmen, den als eigenes bild definieren und dann rotozoomen. geht das?

    i
    Müsste eigentlich funktioniereni



  • ich möchte nicht das 410x410er bild klein machen.
    sondern aus dem 410er bild ein 41x41er kästchen Auschneiden und das benutzen.
    ich hab quasi 100 verschiedene bilder dadrauf. und ich möchte z.b.
    bild 21 nehmen. (x1=0, y1=81, x2=41, y2=122)
    und das bild. also diese 41x41 pixel möcht ich jetzt drehen und ausgeben.



  • Tut mir leid ich habe keine Ahunung wie du das lösen könntest.
    Hast du schon eine Lösung gefunden ?



  • jein...
    eine die das problem löst nicht, aber eine alternative.

    in dem momment wo man das gesammte spritebild dreht, (ist es zwar gedreht) aber dann muss man auch andere coordinaten zum zielbild angeben... also z.b. bei 45° ist die rechte ecke des bildes oben zentrisch eine pyramide. sind bilder jetzt direkt nebeneinander, nimmt man automatisch immer die ecken anderer bilder mit... ist also umständiger quatsch.

    alle bilder die drehen, einzelnd nehmen. das war unsere lösung.

    letztendlich verabschiede ich mich auch jetzt von SDL.
    ich werd jetzt wohl mal etwas anspruchsvolleres machen^^

    danke für deine hilfe 🙂


Anmelden zum Antworten