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

29.05.2011, 20:59

[SDL] Surface in ein Surface blitten

Hallo allerseits,

Ich habe mir mal vorgenommen, eine kleine Funktion zu schreiben, die eine Lebensenergieanzeige als rückgabewert liefert. Vorher wollte ich das ganze erstmal so testen, und bin bisher so weit gekommen:

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
 #include 

 int main(int argc, char *argv[])
 {
    SDL_Surface *screen, *rahmen, *leben;
    SDL_Rect bg;
    SDL_Event event;
    int done = 0;
    
    SDL_Init(SDL_INIT_VIDEO);
    screen = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF);
    
    rahmen=SDL_LoadBMP("rahmen.bmp");
    SDL_SetColorKey(rahmen,SDL_SRCCOLORKEY,SDL_MapRGB(rahmen->format,255,255,255));
    leben=SDL_LoadBMP("leben.bmp");
    SDL_SetColorKey(leben,SDL_SRCCOLORKEY,SDL_MapRGB(leben->format,255,255,255));

    bg.x=0;
    bg.y=0;

    SDL_FillRect(screen,&bg,SDL_MapRGB(screen->format,0,255,255));
    SDL_BlitSurface(rahmen,NULL,leben,NULL);
    SDL_BlitSurface(leben,NULL,screen,NULL);

    while (!done) 
    {
        while (SDL_PollEvent(&event)) 
        {
            switch(event.type) 
            {
                case SDL_QUIT:
                    done = 1;
                    break;
            }
        }
        SDL_Flip(screen);
    }
    return 0;
 }

rahmen.bmp
leben.bmp
Später sollte der Lebensbalken je nach dem wie tief das Leben gesunken ist auch kürzer dargestellt werden, jedoch ist schon hier ein fehler. Bei mir wird immer nur der schwarze Rahmen angezeigt, ohne roten Balken.

Ich glaube fast, dass der Fehler in Zeile 22 ist, obwohl das ja eigentlich funktionieren sollte... Wisst ihr wo ich sonst einen Fehler gemacht haben könnte?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

29.05.2011, 21:04

C-/C++-Quelltext

1
int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

Ist es gewollt, dass du den rahmen aufs leben blittest und nicht anders herum?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

3

29.05.2011, 21:10

Ja ist es, sonst würde man den Rahmen nicht mehr sehen... eigentlich könnte ich den Balken zu schneiden, aber ich dachte mir bei abstrakteren Rahmen geht das ganze um so schneller.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

29.05.2011, 21:19

Mal probiert was passiert wenn du es anders herum machst? ;)
Ich sehe keine konkreten Fehler, also denke ich mal, dein Ramen überlagert das Leben.
Wohl irgendein Fehler beim Colorkey setzen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

5

29.05.2011, 21:31

Mh, ich hab gerade gemerkt dass es an

C-/C++-Quelltext

1
SDL_SetColorKey(leben,SDL_SRCCOLORKEY,SDL_MapRGB(leben->format,255,255,255));

liegt... Ich versteh zwar nicht ganz warum, aber wenn ich das ausklammer funktioniert alles. Darauf hätt ich auch selbst kommen können...

Danke jedenfalls für deine Hilfe!

Edit:

Haha, ich hab gerade gemerkt, dass es immernoch falsch ist. Nur wird jetzt einfach der Rahmen schwarz angezeigt, was ich vorher nicht bemerkt habe... komisch, komisch. Muss wohl wirklich irgendwas am Color Key sein...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Xenos« (30.05.2011, 16:48)


Quin

Frischling

Beiträge: 23

Wohnort: Engelthal

  • Private Nachricht senden

6

02.06.2011, 15:57

Versuchs doch mal einen Bildformat wo den Alphawert des Rahmens speichert, schaut dann auch noch besser aus als mit SDL_SetColorKey.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

02.06.2011, 17:14

Tja, dafür brauch er ein Zusatzpacket :D
@Xenos: an deiner Stelle würde ich mir die SFML anschauen und das Erweitern des Spiels vergessen. Vergiss nicht die SFML zu kompilieren, falls du VS2010 verwendest. Dazu gibts, nicht nur hier hier im Forum, ein paar Beschreibungen und Tutorials.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige