Yop,

Bon bah comme le dit le titre j'ai un problème avec la SDL, plus particulièrement en ce qui concerne la gestion des évènements. J'ai écris un code avec deux surface, une immobile et une autre contrôlable avec les flèches du clavier.
Celle contrôlable ne doit pas toucher celle immobile.
Jusque là ça va. Mais ça se complique quand les deux surfaces se touchent: elle reste collé ensuite.
Il y a aussi un deuxième problème, la surface mobile laisse une "trace" la ou elle passe.

Si quelqu'un pourrai m'aider a corriger mon code ce serai cool, le voici:
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
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
 
SDL_Surface *Init();
 
SDL_Surface *Surface1 = NULL;
SDL_Surface *Surface2 = NULL;
SDL_Surface *ecran    = NULL;
Uint32 bleuElectrique;
Uint32 roseBonbon;
Uint32 vertPomme;
int continuer = 1;
SDL_Rect coord;
SDL_Rect coord2;
SDL_Event event;
int main(int argc, char *argv[])
{
	ecran = Init();
    bleuElectrique = SDL_MapRGB(ecran->format, 22, 167, 255);
	roseBonbon     = SDL_MapRGB(ecran->format, 255, 32, 222);
    vertPomme      = SDL_MapRGB(ecran->format, 0, 170, 0);
 
    Surface1 = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 220, 32, 0, 0, 0, 0);
    Surface2 = SDL_CreateRGBSurface(SDL_HWSURFACE, 110, 110, 32, 0, 0, 0, 0);
	SDL_WM_SetCaption("SDL Test", NULL);
	SDL_FillRect(Surface2, NULL, bleuElectrique);
	SDL_FillRect(Surface1, NULL, vertPomme);
    SDL_FillRect(ecran, NULL, roseBonbon);
 
    coord.x  = ((640 / 2) - (220 / 2));
    coord.y  = ((480 / 2) - (220 / 2));
    coord2.x = 0;
    coord2.y = 0;
 
    SDL_EnableKeyRepeat(10, 1);
 
    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_KEYDOWN:
                if((event.key.keysym.sym == SDLK_UP) && ((((coord2.x + 110) < coord.x ) || ((coord2.x > (coord.x + 220)))) || (coord2.y > (coord.y + 220))))
                {
                    coord2.y--;
                }
 
                else if((event.key.keysym.sym == SDLK_DOWN) && ((((coord2.x + 110) < coord.x ) || ((coord2.x > (coord.x + 220)))) || ((coord2.y + 110) < coord.y)))
                {
                    coord2.y++;
                }
                else if((event.key.keysym.sym == SDLK_RIGHT) && ((((coord2.y + 110) < coord.y ) || ((coord2.y > (coord.y + 220)))) || ((coord2.x + 110) < coord.x)))
                {
                    coord2.x++;
                }
                else if((event.key.keysym.sym == SDLK_LEFT) && ((((coord2.y + 110) < coord.y ) || ((coord2.y > (coord.y + 220)))) || (coord2.x > (coord.x + 220))))
                {
                    coord2.x--;
                }
            break;
            case SDL_QUIT:
            continuer = 0;
            break;
        }
        SDL_BlitSurface(Surface2, NULL, ecran, &coord2);
        SDL_BlitSurface(Surface1, NULL, ecran, &coord);
        SDL_Flip(ecran);
    }
    SDL_FreeSurface(Surface1);
    SDL_FreeSurface(Surface2);
    SDL_Quit();
    return EXIT_SUCCESS;
}
 
 
 
SDL_Surface *Init()
{
    SDL_Surface *ecran = NULL;
    if (SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        fprintf(stderr, "Erreur d'initialisation de la SDL");
        exit(EXIT_FAILURE);
    }
    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
    if (ecran == NULL)
    {
        fprintf(stderr, "Impossible de charger le mode vidéo : %d\n",! SDL_GetError());
        exit(EXIT_FAILURE);
    }
    return ecran;
}