Bonjour
je souhaiterai avoir de l'aide de votre part car je bloque sur un point.
Pour mon mini-jeu, je voudrais déplacer la carte avec la souris (si la souris se trouve au maximum à 20px du borde de la fenêtre droite, alors la camera défile vers la droite).
J'avais réussi à faire fonctionner mon code mais lorsque j'ai voulu passer à l'étape suivante du code (déplacer un personnage) je me suis rendu compte que tant que la souris est dans la zone de scroll, le programme ne s'occupe que du scroll. J'ai donc recommencé le code pour mettre a jour le positionnement de la carte dans la boucle principale.
Le problème c'est qu'il faut constamment bouger la souris pour faire le scroll alors que je voudrais que la carte défile si le curseur est dans la zone de scroll même si la souris ne bouge pas.
Voila mon code qui appelle la fonction:
et la fonction qui s'occupe du scroll:
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 #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "constantes.h" #include "jeu.h" #include "scroll.h" void jouer(SDL_Surface* ecran) { /*Déclaration des variables et des surfaces*/ int continuer = 1; SDL_Surface *carte = NULL, *camera = NULL; int tempsPrecedent = 0, tempsActuel = 0; SDL_Event event; /*Positionnement des surfaces */ SDL_Rect positionCarte, positionCamera; //cette position ne changera jamais positionCarte.x = 0; positionCarte.y = 0; //position de la camera positionCamera.x = 100; positionCamera.y = 100; positionCamera.h = HAUTEUR_FENETRE; positionCamera.w = LARGEUR_FENETRE; //chargement des images carte = IMG_Load("images/maps.png"); camera = IMG_Load("images/camera.png"); //répétition des touches SDL_EnableKeyRepeat(10, 10); while (continuer) { SDL_WaitEvent(&event); switch(event.type) { //clique sur la croix pour quitter case SDL_QUIT: continuer = 0; break; //si on appuie sur une touche du clavier case SDL_KEYDOWN: /*scroll clavier*/ if(event.key.keysym.sym == SDLK_UP || event.key.keysym.sym == SDLK_DOWN || event.key.keysym.sym == SDLK_LEFT || event.key.keysym.sym == SDLK_RIGHT) { //scrollClavier(ecran, carte, &positionCameraActuelle, &positionCameraFinal); } else if (event.key.keysym.sym == SDLK_ESCAPE) { continuer = 0; } break; } //on lance la fonction du scroll par la souris pour savoir si on doit changer la position de la camera scrollSouris(ecran, carte, &positionCamera); //mise à jour des affichages si le temps est bon tempsActuel = SDL_GetTicks(); if(tempsActuel - tempsPrecedent > FPS) { //mise a jour de l'affichage SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */ SDL_BlitSurface(carte, &positionCamera, ecran, &positionCarte); SDL_Flip(ecran); } } SDL_FreeSurface(carte); SDL_Quit(); }
Pourriez-vous m'aider à trouver mon erreur?
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 #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "constantes.h" #include "jeu.h" #include "scroll.h" void scrollSouris(SDL_Surface *ecran, SDL_Surface *carte, SDL_Rect *positionCamera) { int continuer = 1; SDL_Event event; SDL_Rect positionCarte; positionCarte.x = 0; positionCarte.y = 0; while (continuer) { SDL_PollEvent(&event); switch(event.type) { case SDL_MOUSEMOTION: //haut-gauche (1) if(event.motion.x <= ZONE_SCROLL && event.motion.y <= ZONE_SCROLL) { positionCamera->y -= VITESSE_DEFILEMENT; positionCamera->x -= VITESSE_DEFILEMENT; if(positionCamera->y <= 0) { positionCamera->y = 0; } if(positionCamera->x <= 0) { positionCamera->x = 0; } } /* ... j'ai coupé le code pour alléger car c'est toujours pareil*/ //droite-centre (8) else if(event.motion.y > ZONE_SCROLL && event.motion.y < HAUTEUR_FENETRE - ZONE_SCROLL && event.motion.x <= ZONE_SCROLL) { positionCamera->x -= VITESSE_DEFILEMENT; if(positionCamera->x <= 0) { positionCamera->x = 0; } } continuer = 0; break; } } }
Je vous remercie
Partager