Hallo liebe Comunity,
ich bin neu hier, aber kenne das Forum schon länger. Aufmerksam auf diese Seite bin ich durch das Buch von Herrn Kalista geworden. Das ist schon mitlerweile fast drei Jahre her. Bis jetzt habe ich es geschafft alle Probleme die SDL betreffen alleine zu lösen, aber nun bleibt mir nichts anderes übrig als mich doch dieser Community zu wenden.Ich hoffe Ihr könnt mir bei dieser Sache helfen.
Die Aufgabe des Programms:
Das Programm soll mithilfe von
SDL_SetAlpha in einer Schleife zwei Bilder Transparent machen und ihre Transparenzstärke soll sich während der Laufzeit ständig ändern.
Der Sinn:
Das Programm soll in der Lage sein die Buttons (Speichern,Laden, usw.) langsam Transparent zu machen, wenn die Mausbewegung nicht mehr aktiv ist. Da jedes einzelne Button in meinem Menü ein eigenes Bild ist, hab ich einen abgespeckten Testcode geschrieben, der aber nicht wünschenswert arbeitet.
Für eine ernstgemeinte Hilfe sage ich schon mal vielen Dank!
|
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
//Es soll davon ausgegangen werden das die Includedateien korrekt sind, da das Programm sonst überhaupt nicht funktionieren würde
SDL_Surface *screen = NULL; //Für das Fenster
SDL_Surface *imageMenu = NULL; //Für das Hintergrundbild
SDL_Surface *imageButton = NULL; //für das Buttonbild
SDL_Event event;//Für das rechts-oben X-Button zum Schliessen
Uint8 alpha = 128; //Für die Transparenzstärke vom Hintergrundbild
Uint8 beta = 128; //Für die Transparenzstärke vom Buttonbild
bool run = true; //Laufzeitvariable
SDL_Init(SDL_INIT_EVERYTHING);//Gesamte SDL initialisieren
screen = SDL_SetVideoMode(1000,800,32,SDL_SWSURFACE);//Die Fenstereigenschaften festlegen
//Die Bilder Laden
imageMenu = IMG_Load("Grafik\\MENU.png");
imageButton = IMG_Load("Grafik\\RESUME-BUTTON.png");
//position der Bilder bestimmen
SDL_Rect ImagePosition;
ImagePosition.x = 0;
ImagePosition.y = 0;
//die Bilder Transparent machen
SDL_SetAlpha(imageMenu,SDL_SRCALPHA,alpha);
SDL_SetAlpha(imageButton,SDL_SRCALPHA,beta);
//Die Bilder auf das Fenster übertragen
SDL_BlitSurface(imageMenu,NULL,screen,&ImagePosition);
SDL_BlitSurface(imageButton,NULL,screen,&ImagePosition);
while (run)
{
//Falls button X rechts oben am Fenster gedrückt, dann schliesse das gesamte Programm
while (SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
run = false;
break;
}
}
/*Wenn ich diesen komplett auskommentierten Teil aktiviere, dann sind beide bilder so als wären die
Transparenz auf dem Wert 255. Wenn ich es so auskommentiert lasse dann is komischerweise nur das
Hintergrundbild auf den von alpha gesetzten Wert transparent.....
//die Bilder Transparent machen
SDL_SetAlpha(imageMenu,SDL_SRCALPHA,alpha);
SDL_SetAlpha(imageButton,SDL_SRCALPHA,beta);
//Die Bilder auf das Fenster übertragen
SDL_BlitSurface(imageMenu,NULL,screen,&ImagePosition);
SDL_BlitSurface(imageButton,NULL,screen,&ImagePosition);
//Der Overflow ist zu Testzecken beabsichtigt!
beta++;
alpah+=50;
*/
//ohne das sieht man nichts auf dem Bildschirm
SDL_Flip(screen);
}
//Alle surfaces freigeben und SDL beenden, umm Memoryleak zu vermeiden
SDL_FreeSurface(screen);
SDL_FreeSurface(imageMenu);
SDL_FreeSurface(imageButton);
SDL_Quit();[cpp]
|
[/cpp]
EDIT: Sorry! Vergaß zu erwähnen das, dass SDL version 1.2 ist...