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

progger5

unregistriert

1

31.07.2011, 16:40

SDL - Sprite verschieben

Liebe Leute,

ich experimentiere momentan ein wenig mit SDL.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdlib.h>
#include <SDL/SDL.h>


int main(int argc, char *argv[]) {  
    int run = 1; 
    SDL_Surface *screen, *block;
    SDL_Rect dest; 
    SDL_Event event; 
    dest.x = 0; 
    dest.y = 0; 
    
    SDL_Init( SDL_INIT_VIDEO ); 
    screen = SDL_SetVideoMode(800, 600, 16, SDL_SWSURFACE); 
    block = SDL_LoadBMP("block1.bmp"); 
   
    
    while( run ) {
                        
        while( SDL_PollEvent(&event) ) {
                switch( event.type ) {
                        case SDL_QUIT: 
                            run = 0; 
                            break;
                            
                        case SDL_MOUSEMOTION: 
                            dest.x += event.motion.xrel;
                            dest.y += event.motion.yrel;
                        
                            SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));
                            SDL_BlitSurface(block, NULL, screen, &dest);
                            SDL_Flip(screen); 
                        
                            break; 
                }
        }
    }
    
    return EXIT_SUCCESS; 
}



Angenommen, ich fülle *screen mit mehreren konstanten Sprites - nur die Position von *block ändert sich, *block folgt der Maus. Ich kann mir gut vorstellen, dass es sich auf das Laufzeitverhalten des Programmes nicht gerade positiv auswirkt, wenn ich nach dem übermalen von *screen mit schwarz jedes Mal sämtliche Sprites neu zeichne. Liege ich mit meiner Annahme richtig? Gibt's alternative Techniken? Danke euch schonmal.. Grüße ;)

idontknow

unregistriert

2

31.07.2011, 17:43

Doch du musst jeden Frame alles neu zeichnen (mal ganz grob). Die einzige Optimierungsmöglichkeit die es gäbe, wäre, dass du nur die Stellen die sich verändern mit der Hintergrundfarbe/dem Hintergrundbild überzeichnest und in die selben Stellen entsprechende Sprites reinzeichnest sprich nur diese Stellen "updatest".

Ob das wirklich einen nennenswerten Performance Schub gibt bezweifel ich aber irgendwie, könnte man mal testen nur wäre das ganze dann wohl doch mehr oder weniger aufwändig. Alles neu bliten funktioniert auf jedenfall und sollte bezüglich der performance eigendlich keine Probleme geben wenn dann sind die woanderst im Programm ;)