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

Anonymous

unregistriert

1

05.09.2004, 18:35

SDL: Sprite problem

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.

Anonymous

unregistriert

2

05.09.2004, 20:49

mensch bin ich dumm, den fehler findet man immer beim lesen wenn mans abgeschickt hat :(

Also, jetzt gehts

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

05.09.2004, 22:43

Hi,

wäre noch schön wenn Du schreiben würdest, was den Fehler verursacht hat, damit andere User die evtl. später an der selben Stelle stecken auf dieses Topic zurück kommen können :)

- Patrick

Werbeanzeige