Ich weiß nicht ob hier auch fragen zu SDL beantwortet werden aber ich versuch´s einfach mal:
Ich will eine Spriteklasse schreiben mit der ich bilder bewegen kann, also habe ich probiert das bild vorm blitten in einer anderen surface zu speichern, dann die Koordinaten bewegen, das alte bild blitten und das neue drüber. Soweit so gut, es funktioniert irgendwie nicht. ( Man sieht noch das letzte blitten des sprites)
Die Klasse:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <string>
using namespace std;
#include "SDL\SDL.h"
class Sprite
{
public:
Sprite(const string filename, int x, int y,bool transparence=false);
void Load(const string filename);
void SetPos(int x, int y);
void Move(SDL_Surface *target,int move_x, int move_y);
void Draw(SDL_Surface *target);
protected:
SDL_Surface *image;
SDL_Surface *old_image;
SDL_Rect rect;
SDL_Rect old_rect;
bool m_transparence;
};
|
Die betroffene funktion:
|
C-/C++-Quelltext
|
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
|
Sprite::Move(SDL_Surface *target,int move_x, int move_y)
{
// Die alten koordinaten und Daten speichern:
old_rect.x = rect.x;
old_rect.y = rect.y;
old_rect.w = image->w;
old_rect.h = image->h;
// Die Position ändern:
rect.x = move_x;
rect.y = move_y;
rect.w = image->w;
rect.h = image->h;
// Das alte bild speichern und blitten
old_image = SDL_DisplayFormat(target);
SDL_BlitSurface(old_image, NULL, target, &old_rect);
/* den veränderten Bildschirm-Bereich auffrischen */
SDL_UpdateRects(target, 1, &old_rect);
// Das neue bild blitten:
SDL_BlitSurface(image, NULL, target, &rect);
/* den veränderten Bildschirm-Bereich auffrischen */
SDL_UpdateRects(target, 1, &rect);
}
|
Ich würde mich sehr über hilfe freuen.