[c]bouton en sdl

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 918 fois - Téléchargée 18 fois

Contenu du snippet

Voici une fonction fait maison pour faire des boutons en SDL (pas eu le temps de mettre des commentaires)
dite mois si mon code est lisible et les choses que je pourrais améliorer

Pour ceux qui veulent tester direcement sans compiler : http://www.megaupload.com/?d=YU7LIGNN (je peut pas compresser le fichier en .zip)

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

int creabouton(int positionx, int positiony, int w, int h, SDL_Surface* ecran, int couleura, int couleurb, int couleurc)
{
    int continuer = 1, i = 0, resultat = 0, j = 0, resultat2 = 0, j2 = 0;
    SDL_Event event;
    SDL_Surface *bouton = NULL, *degrader = NULL;
    SDL_Rect position, position2;
    position.x = positionx;
    position.y = positiony;
    position2.x = positionx;
    position2.y = positiony;

    bouton = SDL_CreateRGBSurface(SDL_HWSURFACE, w, h, 32, 0, 0, 0, 0);
    SDL_FillRect(bouton, NULL,  SDL_MapRGB(ecran->format, couleura, couleurb, couleurc));
    SDL_BlitSurface(bouton, NULL, ecran, &position);
    resultat2 = (4*h)/100;
    resultat = (4*w)/100;
    for(i = 0; i < resultat || i < resultat2; i++)
    {
      if(i < resultat)
      {
      degrader = SDL_CreateRGBSurface(SDL_HWSURFACE, 1, h, 32, 0, 0, 0,0);
      SDL_FillRect(degrader, NULL, SDL_MapRGB(bouton->format, j, j, j));
      SDL_BlitSurface(degrader, NULL, ecran, &position);
      position.x++;
      j += 255/resultat;
      }
      if(i < resultat2)
      {
      degrader = SDL_CreateRGBSurface(SDL_HWSURFACE, w, 1, 32, 0, 0, 0,0);
      SDL_FillRect(degrader, NULL, SDL_MapRGB(bouton->format, j2, j2, j2));
      SDL_BlitSurface(degrader, NULL, ecran, &position2);
      position2.y++;
      j2 += 255/resultat2;
      }
    }

    SDL_Flip(ecran);
    while(continuer)
    {
     SDL_WaitEvent(&event);
     switch(event.type)
     {
     case SDL_QUIT:
     continuer = 0;
     break;
     case SDL_MOUSEBUTTONDOWN:
     if(event.button.x >= positionx && event.button.x <= (positionx + w) && event.button.y >= positiony && event.button.y <= (positiony + h))
     {
     return 1;
     continuer = 0;
     }
     break;
     }
    }
}

int main ( int argc, char** argv )
{
   int fenetre = 0;
   SDL_Surface *ecran = NULL;
   SDL_Init(SDL_INIT_VIDEO);
   SDL_Event event;
   ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
   SDL_WM_SetIcon(SDL_LoadBMP("icon.bmp"), NULL);
   SDL_WM_SetCaption("Fenetre avec bouton a martin", NULL);
   SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
   fenetre = creabouton(200, 300, 210, 100, ecran, 0, 0, 0);
   SDL_Flip(ecran);

      if(fenetre == 1)
   {
   fenetre = 0;
   SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 033, 50));
   fenetre = creabouton(640/2, 480/2, 40, 40, ecran, 25, 250, 0);
   SDL_Flip(ecran);
   }
   if(fenetre == 1)
   {
    fenetre = 0;
    fenetre = creabouton(0, 0, 400, 360, ecran, 255, 0, 255);
   }

   SDL_Quit();
}

A voir également

Ajouter un commentaire

Commentaires

samodu38
Messages postés
2
Date d'inscription
jeudi 31 décembre 2009
Statut
Membre
Dernière intervention
20 mai 2010
-
Si j'ais bien compris le code de ta fonction (j'ai pas compilé) tan que l'on à pas cliquer sur le bouton le programme n'avance plus? Sa ne marche donc pas si on veut créer plusieurs boutons...
d'accord mais comment charger une image à cette adresse???? et en plus, si tu veux créer plusieurs boutons, tu ne pourras pas les gérer en mem temps et tu ne pourras les utiliser qu'une seule fois. je te conseiile de subdiviser les fonctions en deux sous fonctions comme ceci:

int creabouton(int positionx, int positiony, int w, int h, SDL_Surface* ecran, int couleura, int couleurb, int couleurc, int j)
{ int choisir 1, i 0;
SDL_Event event;
SDL_Surface *bouton = NULL;
SDL_Rect position;
position.x = positionx;
position.y = positiony;
bouton = SDL_CreateRGBSurface(SDL_HWSURFACE, w, h, 32, 0, 0, 0, 0);
SDL_FillRect(bouton, NULL, SDL_MapRGB(ecran->format, couleura, couleurb, couleurc));
SDL_BlitSurface(bouton, NULL, ecran, &position);

SDL_Flip(ecran);
}

void choixbouton(SDL_Surface *ecran)
{
SDL_Event event;
int choisir = 1;
while(choisir)
{......
.........
}
}

Tu pourras utiliser chacunes d'entre elles séparément.

Et si tutrouves comment mettre des images sur chaque point, dis le moi.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.