Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

19.07.2008, 10:20

Animationen SDL

Guten Tag
Ich habe mit SDL begonnen und wollte meine erste Animation programmieren.
Normale Bilder werden schon erfolgreich ausgegeben.

Nun zu meinen Fragen:
1.) Ich habe die einzelnen Animtionen jeweils in einem Bild drin. Ist esschneller, wenn ich fü jede ANimationsstufe ein neues SDL_Durface erstelle (also würden es für meine Spielfigur 12 Surfaces sein) oder in ein Surface, das alles enthält und dann immer beim malen gerechnet weden muss welcher Teil des Bildes ausgegeben wird.

2.)
Ich hab die Methode versucht, wo jeder ANimationsschritt ein eigenes Surface enthält...
Normalerweise lädt man ein Bild ja so ein:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SDL_Surface *temp;
  temp = SDL_LoadBMP(pfad)
  img->image = SDL_DisplayFormat(temp);
  SDL_FreeSurface(temp);
[\code]

Nun will ich aber immer nur den jeweilig relevanten Teil in die einzelnen Surfaces kopieren.
Muss ich da auch mit DisplayFormat arbeiten??
Ich habe es so versucht:

[code]
    SDL_Surface *temp, *temp2;
    if((temp = SDL_LoadBMP(pfad)) == NULL) return -1;
    SDL_SetColorKey(temp, SDL_SRCCOLORKEY, SDL_MapRGB(temp->format, r, g, b));
    temp2 = SDL_DisplayFormat(temp);


    width = temp2->w;
    height = temp2->h;
    framesx = (unsigned char)(width/frameWidth);
    framesy = (unsigned char)(height/frameHeight);
    frames = framesx*framesy;

    img = new CSpriteFrame[frames];
    int count = 0;
img = new CSpriteFrame[frames];
    for (int x = 0; x < framesx; x++)
    {
        for (int  y = 0; y < framesy; y++)
        {
        Draw(temp2, img[count].image, x*frameWidth, y*frameHeight, frameWidth, frameHeight);

            count++;
        }
    }


Leider kommt ne Fehlermeldung, da img[count].image noch nicht richtig initialisiert wurde. Dies wüde ich wenn, mit DisplayFormat tun, jedoch hätte ich da ja das ganze Bild kopiert und ich will ja nur einen Teil haben. Kann mir wer helfen wie ich da vogehen könnte??
Gibt es ne andere Möglichkeit ein leeres Bild zu initialisieren?

Danke für kommende Hilfe! :)

MasterK

Frischling

Beiträge: 92

Wohnort: Koblenz

Beruf: Teamleiter Softwareentwicklung

  • Private Nachricht senden

2

20.07.2008, 20:02

Re: Animationen SDL

Zitat von »"Zergling"«

1.) Ich habe die einzelnen Animtionen jeweils in einem Bild drin. Ist esschneller, wenn ich fü jede ANimationsstufe ein neues SDL_Durface erstelle (also würden es für meine Spielfigur 12 Surfaces sein) oder in ein Surface, das alles enthält und dann immer beim malen gerechnet weden muss welcher Teil des Bildes ausgegeben wird.

An sich musst du dir wegen der geschwindigkeit darüber keine gedanken machen. Ich würds aus prinzip in ein surface packen, wie ein tileset eben.

Zitat von »"Zergling"«


Quellcode

1
2
3
4
5
6
img = new CSpriteFrame[frames];
int count = 0;
img = new CSpriteFrame[frames];
.
.
.

Du legst NUR ein array an (und das sogar 2 mal, sprich du müllst dir den speicher zu), die einzelnen elemente des arrays musst du aber ebenfalls noch anlegen.