Bonjour,

Je suis en train de coder un jeu et je voudrais savoir si je dois tout revoir ou juste modifier quelques lignes...

Voici mes fonctions qui gère le déplacement de mon personnage dans le jeu :

Celle ci qui bouge l'écran lors du déplacement :
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
void MoveMap_Position(Map* m,SDL_Surface* screen,int direction,Config* C,NpcProp* pnjs){
    int i;
    Mix_Chunk *son;
    // UP
    if(direction==0){
        if(m[C->idMap].sens==0){
            if(!CollisionDecor(m,8,7,C)){
                for(i=1;i<=m[C->idMap].HAUTEUR_TILE;i++){
                    m[C->idMap].fenetre.y-=1;
                    AfficherMap(screen,pnjs,m,C);
                    if(i<(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,1);
                    else if(i>(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,2);
                    else
                        OrientationSprite(screen,direction,0);
                    SDL_Flip(screen);
                    SDL_Delay(4);
                }
                OrientationSprite(screen,direction,0);
            }else{
                son = Mix_LoadWAV("son/bruit/collision.wav");
                Mix_VolumeChunk(son, MIX_MAX_VOLUME);
                Mix_PlayChannel(2, son,0);
                SDL_Delay(200);
            }
        }else{
            OrientationSprite(screen,direction,0);
            m[C->idMap].sens=0;
        }
    }
    // RIGHT
    else if(direction==1){
        if(m[C->idMap].sens==1){
            if(!CollisionDecor(m,9,8,C)){
                for(i=1;i<=m[C->idMap].LARGEUR_TILE;i++){
                    m[C->idMap].fenetre.x+=1;
                    AfficherMap(screen,pnjs,m,C);
                    if(i<(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,1);
                    else if(i>(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,2);
                    else
                        OrientationSprite(screen,direction,0);
                    SDL_Flip(screen);
                    SDL_Delay(4);
                }
                OrientationSprite(screen,direction,0);
            }else{
                son = Mix_LoadWAV("son/bruit/collision.wav");
                Mix_VolumeChunk(son, MIX_MAX_VOLUME);
                Mix_PlayChannel(2, son,0);
                SDL_Delay(200);
            }
        }else{
            OrientationSprite(screen,direction,0);
            m[C->idMap].sens=1;
        }
    }
    // DOWN
    else if(direction==2){
        if(m[C->idMap].sens==2){
            if(!CollisionDecor(m,8,9,C)){
                for(i=1;i<=m[C->idMap].HAUTEUR_TILE;i++){
                    m[C->idMap].fenetre.y+=1;
                    AfficherMap(screen,pnjs,m,C);
                    if(i<(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,1);
                    else if(i>(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,2);
                    else
                        OrientationSprite(screen,direction,0);
                    SDL_Flip(screen);
                    SDL_Delay(4);
                }
                OrientationSprite(screen,direction,0);
            }else{
                son = Mix_LoadWAV("son/bruit/collision.wav");
                Mix_VolumeChunk(son, MIX_MAX_VOLUME);
                Mix_PlayChannel(2, son,0);
                SDL_Delay(200);
            }
        }else{
            OrientationSprite(screen,direction,0);
            m[C->idMap].sens=2;
        }
    }
    // LEFT
    else if(direction==3){
        if(m[C->idMap].sens==3){
            if(!CollisionDecor(m,7,8,C)){
                for(i=1;i<=m[C->idMap].LARGEUR_TILE;i++){
                    m[C->idMap].fenetre.x-=1;
                    AfficherMap(screen,pnjs,m,C);
                    if(i<(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,1);
                    else if(i>(m[C->idMap].HAUTEUR_TILE/2))
                        OrientationSprite(screen,direction,2);
                    else
                        OrientationSprite(screen,direction,0);
                    SDL_Flip(screen);
                    SDL_Delay(4);
                }
                OrientationSprite(screen,direction,0);
            }else{
                son = Mix_LoadWAV("son/bruit/collision.wav");
                Mix_VolumeChunk(son, MIX_MAX_VOLUME);
                Mix_PlayChannel(2, son,0);
                SDL_Delay(200);
            }
        }else{
            OrientationSprite(screen,direction,0);
            m[C->idMap].sens=3;
        }
    }
    // Juste pour le réafficher sans le bouger
    else{
        direction=m[C->idMap].sens;
        OrientationSprite(screen,direction,m[C->idMap].sens);
    }
    AfficherMap(screen,pnjs,m,C);
    OrientationSprite(screen,direction,0);
    SDL_Flip(screen);
}
Et celle ci qui gère l'orientation de l'image du joueur
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
 
void OrientationSprite(SDL_Surface* screen,int direction,int move){
    SDL_Surface* image;
    // UP
    if(direction==0){
        if(move==2)
            image=LoadSprite("img/haut3.bmp");
        else if(move==1)
            image=LoadSprite("img/haut2.bmp");
        else
            image=LoadSprite("img/haut1.bmp");
    }
    // RIGHT
    else if(direction==1){
        if(move==2)
            image=LoadSprite("img/droite3.bmp");
        else if(move==1)
            image=LoadSprite("img/droite2.bmp");
        else
            image=LoadSprite("img/droite1.bmp");
    }
    // DOWN
    else if(direction==2){
        if(move==2)
            image=LoadSprite("img/bas3.bmp");
        else if(move==1)
            image=LoadSprite("img/bas2.bmp");
        else
            image=LoadSprite("img/bas1.bmp");
    }
    // LEFT
    else if(direction==3){
        if(move==2)
            image=LoadSprite("img/gauche3.bmp");
        else if(move==1)
            image=LoadSprite("img/gauche2.bmp");
        else
            image=LoadSprite("img/gauche1.bmp");
    }
    AfficherSprite(image,screen);
}
Le problème c'est que je voudrais ajouter des pnjs qui se déplace également.
Et là le problème et que lorsque mon personnage se déplace ducoup les autres animations ainsi que les touches sont bloquer par le SDL_Delay.
ya-t-il un moyen de faire ce déplacement tout en gardant le controle des touches et que les animations continue ?
Je suis bloquer la dessus j'ai essayer plein de chose mais : Sans delay = sans animation et ce n'est pas propre.

Est-ce que quelqu'un peu m'aider ? Je sais que c'est possible car aucun jeu ne bloque les touches et les animations lors de l'appuie des touches
Merci d'avance