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!