IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

event souris [SDL 2.0]


Sujet :

SDL

  1. #1
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut event souris
    Bonjour,

    je souhaite faire déplacer une image en cliquant avec la souris, l'idée est la suivante : je met le curseur sur l'image, je clique down et je maintien puis je déplace la souris et je relâche (clique up) souris pour placer l'image. pour une première exécution c'est nickel sa marche très bien mais lorsque je veux faire un second déplacement sa ne marche plus.

    Ci-dessous le code source écrit :

    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
    #include <sdl.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <sdl_image.h>
     
    int main(int argc, char* args[])
    {
     
    	SDL_Surface *image = NULL, *image2 = NULL;
    	SDL_Texture * texture,*texture2;
    	bool exec = true;
    	int i = 0, j = 0, L = 800, H = 600, Li=32, Hi=32;
    	SDL_Rect Fond = { 0, 0, L, H }, img = { i, j, Li, Hi };
     
    	SDL_Init(SDL_INIT_VIDEO);
    	SDL_Window *fenertre = SDL_CreateWindow("Jeu alignement", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_SWSURFACE);
    	SDL_Renderer * Rendu = SDL_CreateRenderer(fenertre, -1, 0);
     
    	image = IMG_Load("..//images//fond.bmp");
    	texture = SDL_CreateTextureFromSurface(Rendu, image);
    	SDL_RenderCopy(Rendu, texture, NULL, &Fond);
     
    	image2 = IMG_Load("..//images//sourir.bmp");
    	texture2 = SDL_CreateTextureFromSurface(Rendu, image2);
    	SDL_RenderCopy(Rendu, texture2, NULL, &img);
     
    	SDL_RenderPresent(Rendu);
     
    	SDL_Event event;
    	int CG = 0; bool mov = false;
    	while (exec)
    	{
    		SDL_WaitEvent(&event);
    		if ((event.key.keysym.sym == SDLK_ESCAPE) || (event.type == SDL_QUIT)) exec = false;
     
    		if (event.type == SDL_MOUSEBUTTONDOWN)
    		{
    			CG = 1;
    			if ((event.button.x >= i) && (event.button.x <= Li - i) && (event.button.y >= j) && (event.button.y <= Hi - j)) mov = true;
    		}
     
    		if (event.type == SDL_MOUSEBUTTONUP) 
    		{
    			CG = 0; mov = false; i = event.motion.x; j = event.motion.y;
    		}
     
    		switch (event.key.keysym.sym)
    		{
    		case SDLK_DOWN: if (j<(H-Hi))j=j+1; break;
    		case SDLK_UP: if (j > 0) j=j-1; break;
    		case SDLK_LEFT: if (i > 0)i=i-1; break;
    		case SDLK_RIGHT: if (i < (L-Li))i=i+1; break;
    		}
    		switch (event.type)
    		{
    		case SDL_MOUSEMOTION: 
    			if ((CG == 1)&&(mov == true))
    			{	i = event.motion.x - Li / 2; j = event.motion.y - Hi / 2; 
     
    			} break;
    		}
     
    		//Fonction
    		img = { i, j, Li, Hi };
    		SDL_RenderCopy(Rendu, texture, NULL, &Fond);
    		SDL_RenderCopy(Rendu, texture2, NULL, &img);
    		SDL_RenderPresent(Rendu);
    		//fin fonction
     
    	}
    	SDL_DestroyTexture(texture);
    	SDL_DestroyRenderer(Rendu);
    	SDL_DestroyWindow(fenertre);
    	SDL_FreeSurface(image);
    	SDL_Quit();
     
    	return EXIT_SUCCESS;
    }
    Merci

  2. #2
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    slt,

    j'ai ajouter un event qui reset la position de l'image et quand je procède au déplacement de l'image sa fonctionne. Donc, a la position initial sa marche mais des que je déplace l'image sa ne fonctionne plus, pourtant quand je fait un clique up j'enregistre les nouvel coordonnée de l'image. je ne comprend pas qu'elle est le problème

  3. #3
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    la definition de i et j n'est pas la meme dans ton buttonup et ton motion... M'est d'avis que si tu cliques en bas a droite de ton image pour la deplacer, "ca marche".

    Sinon, precise ce que veut dire " ça marche pas", ça sera plus simple pour cerner lle problème.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    event.button.x <= Li - i
    T'es sur qu'il faudrait pas faire une addition plutôt ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    effectivement c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event.button.x <= Li + i et event.button.y <= Hi + j
    c'est drôle

    Merci a vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. WPF Ne pas intercepter les events souris
    Par CoreDumpedped dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 06/02/2017, 16h11
  2. [SDL 1.2] Bug d'un Event SDL (clic de souris)
    Par Ryzen dans le forum SDL
    Réponses: 2
    Dernier message: 16/01/2015, 11h48
  3. Applet event souris
    Par stpaul04 dans le forum Applets
    Réponses: 1
    Dernier message: 09/03/2007, 18h03
  4. usage de SDL events sous Linux console
    Par morning_wind dans le forum SDL
    Réponses: 1
    Dernier message: 28/12/2006, 16h54
  5. Problème de SDL, clique souris
    Par K4trix dans le forum SDL
    Réponses: 6
    Dernier message: 12/07/2006, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo