Salut ! Je débute avec la SDL (dur dur sans cours bien faits !) et j'ai tenté de faire un code ou on peut bouger un personnage. Ca j'y arrive mais c'est quand j'essaie maintenant de le faire sauter en appuyant sur la touche espace, j'ai tenté ca :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
// Le header de SDL
#include <SDL.h>
#include <math.h> 
#define SECONDES *1000
// Les surfaces
SDL_Surface * sEcran;
SDL_Surface * sImage;
int currentTime = SDL_GetTicks(); 
   int nextUpdateTime = currentTime;
void init()
{
    // Initialisation
    SDL_Init(SDL_INIT_VIDEO);
    sEcran = SDL_SetVideoMode(800, 600, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
    SDL_ShowCursor(0);
 
    // Chargement de l'image
    sImage=SDL_LoadBMP("img.bmp");
}
 
void Quit()
{
    SDL_FreeSurface(sImage);
    SDL_FreeSurface(sEcran);
    SDL_ShowCursor(1);
    SDL_Quit();
 
bool exit(0);
}
 
int main(int argc, char *argv[])
{
 
    init();
 
    SDL_Rect rect; // Source
    SDL_Rect dest; // Destination
    SDL_Rect rect2; // Source
    SDL_Rect dest2; // Destination
    SDL_Event event; // On en aura besoin plus tard
 
    rect.x=0;
    rect.y=0;
    rect.w=80;
    rect.h=80; // L'image fait 80x80
 
    dest.x=360;
    dest.y=260;
    dest.w=80;
    dest.h=80;
 
 
    // Boucle principale
    while(true)
    {
 SDL_FillRect(sEcran,NULL,0);
Uint8 *keys;
keys = SDL_GetKeyState(NULL);
 
                    if(keys[SDLK_UP])
        {
                         dest.y-=1;
                    if(dest.y<0)
                        dest.y=0;
 
        }
                if(keys[SDLK_DOWN])
        {
                         dest.y+=1;
                    if(dest.y>519)
                        dest.y=519;
 
        }
                if(keys[SDLK_RIGHT])
        {
                         dest.x+=1;
                    if(dest.x>719)
                        dest.x=719;
 
        }
                if(keys[SDLK_LEFT])
        {
                         dest.x-=1;
                    if(dest.x<0)
                        dest.x=0;
 
        }
 
 
        // Tant qu'il y a des evennements
        while(SDL_PollEvent(&event))
        {
            // Si c'est un message SDL_QUIT
            if(event.type==SDL_QUIT)
            {
                Quit();
            }
            else if(event.type==SDL_KEYDOWN)
            {
                // Si c'est la touche Echap
                if(event.key.keysym.sym==SDLK_ESCAPE)
                    Quit();
                     if(event.key.keysym.sym==SDLK_SPACE)
                     {                               
                    long posYinit = dest.y;
 
                    while((posYinit - dest.y) < 300)// Début de la boucle de saut
                    {
                     dest.y--;                
                     // On met a jour la "date" actuelle
                     currentTime = SDL_GetTicks();
                     if( currentTime > nextUpdateTime ) 
                     {
                     /* On fixe la date du prochain changement : une demi seconde après */
                     nextUpdateTime = currentTime + 500;
                     }
                                    }
                                                  }
                                                               }
}
 
        SDL_BlitSurface(sImage,&rect,sEcran,&dest);
        SDL_Flip(sEcran);
 
    }
 
    return 0;
 
}
Mais ca ne marche pas ! Le programme plante totalement.

En plus de cela, j'avais essayé une fois de mettre une image de fond que je blit sur sEcran (le background initialisé au début) mais quand je blit une image sur ce même fond et que je la déplace au clavier je me retrouve avec une trainée de couleur.... j'ai essayé d'éffacer le fond comme je le faisait pour pas avoir la trainée sur la surface principale sEcran mais justement mon fond se voit plus une fois effacé et c'est pas ce que je veux !

En clair je suis bien pommé dans la SDL quand même