Mehrere Sprites in einem großen Image? [SDL]



  • Hallo!

    Ich arbeite gerade mit SDL an einem 2D-Autorennen und würde gerne wissen, wie
    man mehrere Sprites in ein Image packt und dann extra lädt (nach Koordinaten oder so etwas ähnliches ...) ...

    Wenn man ein Auto lenkt, dreht es sich, und da ich 24 verschieden Richtungen
    habe, müsste ich sehr viele .bmp Dateien anlegen 😞
    Das wäre sehr viel Arbeit! Jedes Auto sollte dann auch noch eine andere Farbe
    haben und das wäre dann sogar die 5-fache Arbeit 😮

    Zu den 24 verschieden Richtungen...
    Ich weiß, dass ich meine Bilder mit Hilfe von gfx drehen könnte, aber leider
    funktioniert es aus irgendeinem Grund nicht ...

    Ich freue mich über jede Hilfe!
    Danke 🙄

    Lg
    SFandler



  • Kann mir niemand helfen? 😞

    Würde mich sehr freuen, wenn mir jemand zeigen könnte, wie das geht ..

    Lg 👍
    SFandler



  • Zu den Farben: Buzzword Tinting

    von SDL hab ich keine Ahnung, aber normalerweise sollte es dir möglich sein, nur einen Teil des Rechtecks zu rendern. Also sowas wie: von Koordinate (x,y) bis (x1,y1). Musst du selbst mal suchen.

    //edit falsches Buzzword...ich idiot.



  • In SDL gfx gibts ne Funktion die heisst rotozoomSurface. Das ist was du suchst.



  • SFandler schrieb:

    Ich weiß, dass ich meine Bilder mit Hilfe von gfx drehen könnte, aber leider
    funktioniert es aus irgendeinem Grund nicht ...

    Äusserst hilfreiche Problembeschreibung.



  • Ich kann ja auch nicht erklären, warum rotozoom nicht funktioniert...
    Es passiert einfach garnichts 👎

    Wenn ich mein Programm kompiliere, kommen keine Warnungen oder Fehler...
    Und wenn ich dann versuche, ein Bild zu drehen, passiert nichts.
    Es bleibt ganz normal ... 😞

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Edit:

    Ich habe mir jetzt gerade SDL_gfx ganz neu heruntergeladen und alles eingefügt,
    wie man es tun sollte. Jetzt passiert plötzlich etwas, beim Starten des Programms,
    aber leider nicht das, was ich wollte:

    Unbehandelte Ausnahme bei 0x68129d00 in Car-Race.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x0000013c.
    

    Was mache ich jetzt schon wieder falsch? 😕

    Der Fehler liegt in der Zeile "optimizedimage=SDL_DisplayFormat(loadedimage);"
    in meiner loadimage-Funktion.
    Diese Funktion hat bis jetzt immer geklappt...

    Liegt es vielleicht daran, dass ich einem Array ein Bild zuweisen möchte?

    Ich freue mich über jede Hilfe!
    Lg 🙄
    SFandler



  • Juhu es klappt!!

    Danke für eure Hilfe 🙂

    Ich habe meiner Variable das Bild vor der Initialisierung zugewiesen 🙄

    Lg 👍
    SFandler



  • Merk dir fürs nächste Mal: Damit wir nicht ins Blaue raten müssen, solltest du einen kompletten und minimalen Code mit dem beschriebenen Problem posten.



  • Ich habe gerade weiter nach diesem Extra-Images laden gegoogelt ...
    Und auf Lazy-Foo bin ich auf das sogenannte "Tiling" gestossen... (http://lazyfoo.net/SDL_tutorials/lesson29/index.php)
    (Was ich eigentlich gesucht hatte! 🙄)

    Ich habe mir das auch ordentlich durchgelesen ... Aber leider verstehe ich es nicht ganz.
    Ich habe keinen Schimmer, wie das mit dieser Map File (00 01 01 01 04 04 ...) und
    dem Herausholen der einzelnen Teile des Bildes funktioniert! 😕

    Kann mir vielleicht jemand helfen?
    Ich würde mich sehr freuen!
    Hoffentlich versteht ihr meine Frage.

    Lg 👍
    SFandler



  • Naja bei SDL nimmst einfach nur die absolute Position des "Unterbildes" auf der großen Textur als Rect-Koordinaten. Die Surface ist dann das "Bild" für dieses Rect.



  • Danke für deine Antwort! 👍

    Sorry, aber ich bin noch Anfänger und kann damit jetzt leider nichts anfangen .. 😞
    Das mit den Rect-Koordinaten habe ich soweit verstanden, aber wie setze ich die Koordinaten
    des Bildes?
    Ich habe leider keine Ahnung 😞

    Ich habe es bis jetzt soweit:

    SDL_Rect offset;
    offset.x=?; offset.y=?; offset.h=?; offset.w=?;
    SDL_BlitSurface(source,NULL,screen,&offset);
    

    Habe bereits verschiedene Werte für x,y,h und w eingesetzt, aber wenn h und w
    kleiner sind als x und y, kommt nichts auf den Bildschirm, und umgekehrt wird
    das ganze Bild auf den Bildschirm gebracht ...

    Lg
    SFandler

    Edit:
    Habe gerade in Google gefunden, dass man statt dem NULL in der BlitSurface-Funktion
    ein SDL_Rect angeben soll, und das ist dann wohl die Position des UnterBildes,
    was du gemeint hattest!

    Jetzt muss ich nur noch herausfinden, wie das mit der .map oder .txt Datei funktioniert,
    damit für die 00 und 01 und 02 ... ein extra Bild auf dem Bildschirm gesetzt wird 😃

    Vielen Dank für deine Hilfe! 👍


Anmelden zum Antworten