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

06.01.2010, 18:47

SDL Problem mit Set SDL_SetColorKey()

Hallo ich bin gerade dabei ich in SDL Einzuarbeiten und hab mir gedacht ich möchte zu erst einfach ma eine Figur im fentser Luafen und springen lassen.

klappt auch alles bis jetzt noch ganz gut doch tritt nun ien problem auf bei
SDL_SetColorKey() !!
Ich möchte nun die Grafiken erweitern um den sprung von Sonic auch zu animieren aber mit der eirweitereten Grafik die Bild2 wird die Hintergrundfarbe nicht merh Transparent. Das finde ich komisch denn es hat sich ja nix verändert die Farbe ist ja die Selbe.

Unter den Bildern, hab ich meine Code gepostet. Hoffe hier hat jemand ne Idee , worann das nun liegen kann :)

Danke im vorraus mfg Loader007 8)

Bild 1

(Link)


Bild2

(Link)




Quellcode

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <windows.h>
#define true 1
#define false 0



    SDL_Surface *screen, *bmp,*bg_img; // Bildschirm ,Sprungani, Sonic  , Hintergrund
    SDL_Rect dest, dest2,bg;
    
    SDL_Event event;
    Uint8 *keys;
    float X = 0, Y=350; //Sonic POs X/Y
    float time,time2,time3;
    
    //BOOL INT
     int jump=false;  // sprung 
     int fall=false;  //Fall
     int right=true;  //rechts wenn true wenn false links
     int done=false; //Im Spiel

   

   int InitVideo(SDL_Surface *screen)
   {
       char ErrorMsg[150];
           
           if(SDL_Init(SDL_INIT_VIDEO) == -1)
           {
            sprintf(ErrorMsg,"INIT Error %s",SDL_GetError());
            MessageBoxA(NULL,ErrorMsg,"Error",MB_OK);
            
            return 1;
           }
    
           atexit(SDL_Quit);
    
    
           if((screen= SDL_SetVideoMode(640,426,32, SDL_DOUBLEBUF))== NULL)
           {
             sprintf(ErrorMsg,"SDL_VideoMode Error %s",SDL_GetError());
             MessageBoxA(NULL,ErrorMsg,"Error",MB_OK);
             return 1;
           }
     
     
     
            if((bg_img= SDL_LoadBMP("wolken.bmp"))==NULL)              //Hintergrund wird geladen 
            {
                 sprintf(ErrorMsg,"%s",SDL_GetError());
                 MessageBoxA(NULL,ErrorMsg,"Error",MB_OK);
                 return 1;
            }
            
            if((bmp= SDL_LoadBMP("sonic1_neu.bmp"))==NULL)                  //Sonic Figur wird geladen 
            {
                sprintf(ErrorMsg,"%s",SDL_GetError());
                 MessageBoxA(NULL,ErrorMsg,"Error",MB_OK);
                 return 1;
            }
            
            
  
            
    return (int)screen;
}







int main(int argc, char *argv[])
{
  
    SDL_WM_SetCaption("Sonic", NULL);
 
    screen = (SDL_Surface *)InitVideo(screen);

    ///////////////////////////////////////////////////////////////////////////////////////////
    dest2.x = 0;
    dest2.y = 0;
    dest2.w = 42;
    dest2.h = bmp->h/4;    // RectSpezieller ausschitt des Bildes


    
    
   
    //////////////////////////////////////////////////////////////////////////////////////////
    dest.h = (bmp->h/4)+1;  
    dest.w = (bmp->w/4)+1;                       // Rect  Bewegen bildes SONIC
    
    /////////////////////////////////////////////////////////////////////////////////////////
 
    bg.w = bg_img->w;     //Rect für den Hintergrund
    bg.h = bg_img->h;
    //////////////////////////////////////////////////////////////////////////////////////////
    
   SDL_ShowCursor (false);

   SDL_SetColorKey(bmp,SDL_SRCCOLORKEY,SDL_MapRGB(bmp->format,0,128,128)); 
    while(!done)
    {
                 
                while(SDL_PollEvent(&event))
                {
                    switch(event.type)
                    {
                     
                       
                       case SDL_QUIT:
                           done = true;
                           
                    }
                }
                
                
              
                
                
              
                
                keys = SDL_GetKeyState(NULL);
                
                  if(keys[SDLK_ESCAPE])
                   done = true;
                
                
                if(keys[SDLK_SPACE])
                {
                   if( jump == false && fall == false)
                   jump=true;
                   
                }
                
   
                
                if(keys[SDLK_RIGHT])
                {
                   if(X < 630 - 46)
                        
                        if(Y == 350)
                        X+=1.5;
                            else
                      {   
                          
                           /* destj2.x =0;
                            destj2.y = bmp_jm->h/2;
                            destj2.h = bmp_jm->h/2;*/
                            X+=0.3;
                      }
                      
                      if(right == false && Y ==350)
                               dest2.x = 0;

                               dest2.y = 0;
                               dest2.h = bmp->h/4;
                               right = true;
                      
                
                        if(dest2.x >=  467-(46.7*2))
                          dest2.x =0;
                        
                        else if(dest2.x < 467-(46.*2))
                            dest2.x += 46.7;
                }
                

                else if(keys[SDLK_LEFT])
                {
                   if(X > 10)
                      if(Y == 350)
                      X-=1.5;
                      else
                         X-=0.3;
                      
                      
                      if(right == true &&Y == 350)
                               dest2.x =467-42;
                               dest2.y = bmp->h/4;
                               dest2.h = bmp->h/4;
                               right = false;
                     
                    
                 
                    if(dest2.x >=0)
                      dest2.x-=46.7;
                      
                      
                          if(dest2.x <=  0)
                          dest2.x =467-42;
                      
          
                      
                }  
                else
                {
                    if(right == true)
                      dest2.x = 0;
                    
                    if(right == false)
                      dest2.x = 424;
                }
                
                   
                if(jump == true)
                {
                      if(Y >= 200)              
                        Y-=1;
                 
                        else
                        {
                              jump= false;
                              fall = true;
                        }
                        
                }
               
               char msg[55];
               if(fall == true)
                {
                         if(Y < 350)
                             Y+=1;                    
                                                 
                         else
                           fall = false;
                         
                }  

                dest.x = X;
                dest.y = Y;
             
        
        
   
        SDL_BlitSurface(bg_img, NULL, screen,  &bg); 
        
        
        
        SDL_BlitSurface(bmp, &dest2, screen, &dest);
        SDL_Flip(bmp);
        
        SDL_Flip(screen);
        
        

}
     
  SDL_FreeSurface(bmp);
  SDL_FreeSurface(bg_img);   
  SDL_Quit();              

  return 0;
}

2

06.01.2010, 19:31

Nebenbei: Wozu konvertierst du das Screen surface nach int und wieder zurück ? (in InitViedeo)

3

06.01.2010, 19:56

Die Funktion ist eigentlich in einer anderen .h deklariert und soll dann eben Alles statten und den wert dann zurück geebn der cast ist wegen dem Compiler

4

06.01.2010, 21:09

Zitat

geebn der cast ist wegen dem Compiler

Wieso wegen dem Compiler ? Der wird dich wohl kaum dazu zwingen, ein SDL_Surface in einen Integer zu Casten !

EDIT: Was gibt denn SetColorKey zurück ?

5

06.01.2010, 21:45

Zu ! ja der Compiler will eienn Cast haben ende damit hat es sicher nix zu tun

zu deienr 2ten Frage ich bekomme den Rückgabe wert 0 was denk ich am auch so sein sollte



EDIT: Ein kolege hat gesagt ich soll einfach ma Experimetell die Farbe wechseln die im hintergrund liegt hab cih gemacht nun gehst xD weis der geier was das soll aber ok

danke trozdem
can be closed

Käsekönig

1x Contest-Sieger

  • Private Nachricht senden

6

06.01.2010, 23:52

Dann war die Farbe des Hintergrunds wohl nicht genau die, die du angegeben hast.

Werbeanzeige