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 :

Coller une image avec sdl


Sujet :

SDL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Coller une image avec sdl
    Salut tt le monde,
    Je débute en sdl et je suis entrain de développer un jeu de Bubble Pop.
    Je veux réaliser une fonction qui permet de coller une image à une position (sur laquelle je clique avec la souris) et puis je récupère la souris pour charger une nouvelle image et la coller elle aussi.
    Le prob c'est que la 1ère image suit toujours la souris et change constamment de position en suivant la souris.
    Merciiii bien d'avance!!
    voici une partie de mon code
    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
     
    while(continuer)
        {
            SDL_PollEvent(&event);
     
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
     
                // On limite les déplacements de Zozor à son enclos (mouahaha)
     
                case SDL_MOUSEBUTTONUP:
                // Empêcher le dépassement vers la droite
                if(event.button.x > ecran->w - surfBalle[0]->w - 350){
                    SDL_WarpMouse(ecran->w - surfBalle[0]->w - 350, event.button.y);
                    SDL_BlitSurface(surfBalle[0],NULL,ecran,&positionBalle);
                }
                // Empêcher le dépassement vers la gauche
                if(event.button.x < 85){
                    SDL_WarpMouse(ecran->w - surfBalle[0]->w - 85, event.button.y);
     
                }
                // Empêcher le dépassement vers le haut
                if(event.button.y < 120){
                    SDL_WarpMouse(ecran->w - surfBalle[0]->w - 120, event.button.y);
     
                }
                // Empêcher le dépassement vers le bas
                if(event.button.y > ecran->h - surfBalle[0]->h - 45){
                    SDL_WarpMouse(ecran->w - surfBalle[0]->w - 45, event.button.y);
     
                }
     
     
                    SDL_GetMouseState(&souris_x, &souris_y);
     
                    positionBalle.x = souris_x;
                    positionBalle.y = souris_y;
                    r.x = positionBalle.x;
                    r.y = positionBalle.y;
                    SDL_FillRect(bg, &r, 0);
                    SDL_BlitSurface(surfBalle[0], NULL, bg, &positionBalle);
     
     
                    break;
            }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 896
    Points : 219 536
    Points
    219 536
    Billets dans le blog
    124
    Par défaut
    Bonjour,

    Dans la théorie même de ce que vous demandez, il faut utiliser une sorte de flag, pour dire qu'il y a quelque chose d'attacher à la souris ( et aussi un pointeur, si on veut attacher différente chose à la souris ).
    Et première chose que je ne vois pas, c'est ce flag. Donc, oui, votre image sera toujours attaché à la souris.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ( attached == 1 )
         SDL_BlitSurface(surfBalle[0], NULL, bg, &positionBalle);
     
    if ( key == SDL_ESCAPE )
         attache = 0;
    ( Par exemple, ce n'est juste que pour expliquer le principe )

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Voici un petit programme que j'ai réalisé et qui déplace Zozor à la souris.
    J'espère que celà va t'aider.

    Outanapishtim.


    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
     
    // MoveWithMouse01
    // Déplace Zoror à l'aide d'un click gauche de la souris
    // et le positionne à un endroit différent à l'aide du même click gauche.
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    SDL_Surface *ecran = NULL, *zozor = NULL;
    SDL_Rect positionZozor;
    SDL_Event event;
    int continuer = 1;
     
    const int LARGEURBITMAP = 84; // Dimensions du bitmap
    const int HAUTEURBITMAP = 95;
     
    int zoneSaisieGauche_x; //variables définissant la zone de saisie
    int zoneSaisieDroite_x;  
    int zoneSaisieHaut_y;
    int zoneSaisieBas_y;
     
    int delta_x = 0;  // Différence en pixels entre la position nouvellement saisie
    int delta_y = 0;  // et positionZozor
     
    bool leftClickOnBitmap = false; // Pour savoir si on a cliqué sur le bitmap
     
    void Reset_Coord_Zone_Saisie(); // Calcul de la zone de saisie par rapport
                                    // a l'emplacement du bitmap actuel
     
    int main(int argc, char *argv[])
    {
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Gestion des evenements en SDL - "
    		" Deplacez Zozor a l'aide de la souris gauche", NULL);
     
        /* Chargement de Zozor */
        zozor = SDL_LoadBMP("zozor.bmp");
        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
     
        /* On positionne Zozor en haut à gauche de l'écran */
        positionZozor.x = 1;
        positionZozor.y = 1;
     
        Reset_Coord_Zone_Saisie();
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
     
    			case SDL_MOUSEBUTTONDOWN:
    			   if (event.button.button == SDL_BUTTON_LEFT)
    			   {
                     if(leftClickOnBitmap)
    				 {
    					leftClickOnBitmap = false;	
    				 }
    				 else
                         if(((event.button.x >= zoneSaisieGauche_x) && 
    					     (event.button.x <= zoneSaisieDroite_x)) &&
    					    ((event.button.y >= zoneSaisieHaut_y) &&
    					     (event.button.y <= zoneSaisieBas_y)))
    				            {
    					          leftClickOnBitmap = true;
    							  delta_x = event.button.x - positionZozor.x;
    							  delta_y = event.button.y - positionZozor.y;
    							  SDL_SetAlpha(zozor, SDL_SRCALPHA, (170));
    							  /* On rend Zozor légèrement transparent
    							     quand on clique sur lui */
    				            }
    			   }
    			break;
     
                case SDL_MOUSEMOTION:
                if(leftClickOnBitmap)
    			{
                  positionZozor.x = event.button.x - delta_x;
                  positionZozor.y = event.button.y - delta_y; 
    			  Reset_Coord_Zone_Saisie();
    			}
     
            }
     
            /* On efface l'écran */
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
    		/* On place zozor à sa nouvelle position */
    		if(! leftClickOnBitmap)
    		{
    		  SDL_SetAlpha(zozor, SDL_SRCALPHA, (255));
    		  /* On rend à Zozor sa transparence normale dès qu'on
    		     le dépose à un autre endroit de l'écran */
    		}
            SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
            /* On met à jour l'affichage */
            SDL_Flip(ecran); 
        }
     
        SDL_FreeSurface(zozor);
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
     
     
    void Reset_Coord_Zone_Saisie()
    {
    	zoneSaisieGauche_x = positionZozor.x + 20;
    	zoneSaisieDroite_x = positionZozor.x + LARGEURBITMAP - 20;
    	zoneSaisieHaut_y = positionZozor.y + 20;
    	zoneSaisieBas_y = positionZozor.y + HAUTEURBITMAP -20;
    }

Discussions similaires

  1. [XL-2010] Coller une image du Presse-Papier avec SendKeys
    Par Kutoh dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/08/2013, 16h33
  2. Copier, couper et coller une image avec Qt
    Par Aminesrine dans le forum Débuter
    Réponses: 9
    Dernier message: 28/03/2011, 13h20
  3. Faire clignoter une image avec la SDL?
    Par francoisd42 dans le forum SDL
    Réponses: 2
    Dernier message: 29/04/2009, 16h31
  4. Réponses: 5
    Dernier message: 29/03/2009, 14h38
  5. Coller une image à coté d'un DIV avec background
    Par Shuny dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 28/11/2007, 19h34

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