bonjour,
est-il possible d'effectuer un test de collision entre le pointeur de la souris (quand l'utilisateur clique) et un objet ?
ce sera pour réaliser un jeu de type click and play an C avec la SDL
merci
bonjour,
est-il possible d'effectuer un test de collision entre le pointeur de la souris (quand l'utilisateur clique) et un objet ?
ce sera pour réaliser un jeu de type click and play an C avec la SDL
merci
Il faudra le faire à la main, la difficulté dépendra du type de jeu... Dans un jeu en 3D cela est plus difficile à gérer que dans un jeu en 2D...
Si tu utilises que des surfaces 2D à ce moment là, je ne pense pas que ce soit très difficile...
Donc quel est le type de jeu ?
Jc
un jeu en 2d type monkey island.Envoyé par fearyourself
Comment s'y prendre pour savoir comment gérer les collisions entre souris et un objet et surtout quand les formes de l'objet ne sont pas du tout classiques (pas de rectangle ou carré ou cercle...).Envoyé par Fiquet
Si ton jeu est en 2D, tu dessines en carré ou triangle utilisant la valeur Alpha pour une transparence.Envoyé par youp_db
En gardant ce concept de carré, tu peux facilement connaître la liste des objets dans lequel la souris se trouve. En les ordonnant du plus proche au plus loin, tu regarde quel pixel tu touches sur chaque image et la première image dont le pixel n'est pas transparent est l'objet que tu touches...
Jc
pourquoi ce code ne fonctionne pas ?
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 int verif_collision(SDL_Rect obj, SDL_Event event) { int i=0; int k=0; int verif_x=0; int verif_y=0; for(i=obj.y;i<obj.h;i=i+0.000001) { if(i==event.button.y) verif_y=1; for(k=obj.x;k<obj.w;k=k+0.000001) { if(k==event.button.x) verif_x=1; } } if(verif_x==1 && verif_y==1) return 0; return 1; }
Salut,
Oula, ton code est euh spéciale, j'aurai pas du tout fait comme ça. Pour tester si un click se fait sur une surface, tu teste si le point où tu click se trouve dans une surface rectangulaire.
donc voici comme tu pourrai modifier ton code :
j'ai pas testé, mais ça devrai pas être loin de ça ;-)
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 int verif_collision(SDL_Rect obj) { int x, y; Uint8 MouseState; //On récupère l'état de la souris MouseState = SDL_GetMouseState(&x, &y); /* Code à exécuter si l'on a appuyé sur le bouton gauche */ if (MouseState & SDL_BUTTON(SDL_BUTTON_LEFT)) { //On test si le click se fait sur une surface if ( (obj.x < x) && ( ((obj.x) + (obj.w)) > x) && (obj.y < y) && ( ((obj.y) + (obj.h)) > y)) { return 1; //Click sur la zone } } } return 0; //en dehors de la zone }
Je suis d'accord avec MrDuChnok...
Ta solution :
ajoute un flottant à un entier... C'est déjà un mauvais début
Code : Sélectionner tout - Visualiser dans une fenêtre à part for(i=obj.y;i<obj.h;i=i+0.000001)
(surtout ajouter un flottant qui est plus petit que 1)
Jc
oups effectivement, pas fait attentionEnvoyé par fearyourself
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager