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

C Discussion :

Mon menu déroulant


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 72
    Par défaut Mon menu déroulant
    Bonjour,comment va ??
    me cela ira peut être mieux après, je me présente un peu, depuis deux mois j'apprends à programmer en C avec la sdl, et j'ai créer un éditeur de map basique qui fonctionne.Et un bout du jeu qui va avec, j'apprends sur plusieurs site, c'est cool très

    J'ai voulu l'améliorer et mettre un menu déroulant à droite avec mes tiles affichées pour pour les choisir.

    fonction qui affiche

    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
     
    void drawTileset (void)
    {
        int x,y,i,xsource,ysource;
        /*La limite de début d'affichage du menu*/
        x = LIMITE_SURF-TILE_SIZE;
        y = 0 ;
        /*Rectangle et fond du menu*/
        SDL_Surface *rectangle=NULL, *fond=NULL;
        fond = SDL_CreateRGBSurface(SDL_HWSURFACE,SURF_NB_TILE_X,SCREEN_HEIGHT,32, 0,0, 0, 0);
        rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE,33, 33, 32, 0,0, 0, 0);
        /*Taille des rectangles*/
        SDL_FillRect(rectangle, NULL, SDL_MapRGB(jeu.screen->format, 255,0,0 ));
        SDL_FillRect(fond, NULL, SDL_MapRGB(jeu.screen->format, 255,0,0 ));
        /*affichage du fond*/
        drawImage(fond,LIMITE_SURF+TILE_SIZE ,0);
        /*Affichage des tiles et si i=la tile choisi on dessine un rectangle derriére*/
        for(i=map.chipsetStartY;i<=MAX_TILES;i++)
        {
            if (i==cursor.tileID)
            {
                drawImage(rectangle,x,y);
            }
     
            ysource = i / NBR_TILE_X * TILE_SIZE;
            xsource = i % NBR_TILE_X * TILE_SIZE;
            drawTile(map.tileSet,x, y, xsource, ysource);
     
        /*On incrémente x de la taille d'une tile, et remise à la limite d'affichage si la tile dépasse de l'écran*/
           x += TILE_SIZE+1;
           if(x>=(SCREEN_WIDTH-TILE_SIZE))
           {
              x=LIMITE_SURF-TILE_SIZE;
              y+=TILE_SIZE+1;
           }
     
        }
        /*On libére les surfaces*/
        if (rectangle != NULL)
    	{
    		SDL_FreeSurface(rectangle);
    	}
    	if (fond != NULL)
    	{
    		SDL_FreeSurface(fond);
    	}
     
     
    }
    Et ma fonction qui gére le choix de la tile

    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
     
     
    menuNbTile=(SURF_NB_TILE_X)/(TILE_SIZE+1);
    	char file[120];
     
    /*menu deroulant*/
     
        if (input.pagedown==1)
        {
            if (map.chipsetStartY<=MAX_TILES-menuNbTile) map.chipsetStartY+=menuNbTile;
        }
        if (input.pageup==1)
        {
            if (map.chipsetStartY>=menuNbTile) map.chipsetStartY-=menuNbTile;
        }
     
    /*si clic sur bouton droit souris,x superieur à la limite d'affichage*/
     if(input.copy==1 )
        {
            if (cursor.x>LIMITE_SURF  )
            {
              /*fonction qui pose problème pour choisir ma tile*/
              cursor.tileID= map.chipsetStartY + ((cursor.x)/ TILE_SIZE+1) +  menuNbTile*(cursor.y/ TILE_SIZE+1);
            if(cursor.tileID>=MAX_TILES)
            {
                cursor.tileID=MAX_TILES-1;
            }
            input.copy=0;
            }
    1---Donc voilà, mon soucis c'est que j'ai un décalage lorsque je choisi ma tile
    exemple: je choisi la tile n°3, et j'obtient la tile n°65, si je choisi la 6,l'obtient la 130.
    Le décalage est donc une valeur constante, que j'ai cherché et qui se trouve être la largeur de l'écran(SCREEN_WIDTH).
    2---Mais là ou cela devient un peu frustrant,c'est que si je descend la souris (cursor.y),un autre décalge de -1 pixel sur cursor.x et cursor.y se met en place à chaque fois que je descend cursor.y de une TILE_SIZE.

    Normalement, enfin pour moi il me semble ne pas avoir oublier de rattraper mon pixel de déport.
    Si quelqu'un comprend mes explications, je veux bien un peu d'aide

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Comme ca, je ne vois pas dans ton code l'erreur.

    Quand un problème n'est pas quelque part, il est ailleurs.
    Vu que tu as identifié la valeur de l'erreur, cherche si tu ne ferais pas une conversion en trop ou en manque.

    Par exemple, utiliser la distance (en pixels) comme index de la tuile, ce qui serait signe que tu a oublié de diviser par la taille de la tuile ou par le décalage d'une tuile à la suivante (dans la liste).

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Bonjour,

    Fais quelques "printf" judicieux de tes variables de position pour pister le problème ...

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 72
    Par défaut
    Salut leternel, merci pour avoir répondu.

    C'est ce que je fais, je cherche, depuis deux jours je fais des tests. J'ai également essayé de mettre mon menu à gauche,à partir de x=0 mais le décalage entre ma tile voulue et celle choisi était égale à 185, une valeur vraiment bizarre, mais je tombais pile sur l'affichage, hors là je n'ai pas encore identifié la valeur exacte, vu que j'ai encore mon décalage lorsque je choisi ma tile n°200 ou plus le décalage est de environ 16 pixels je pense, donc la moitié de ma tile.j'ai 256 tiles....

    C'est sûrement ma fonction de calcul de coordonnées qui pose problème, enfin je pense..

    Comment ça des "printf", pour renvoyer quoi?

  5. #5
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par nanosoft Voir le message
    Bonjour,

    Fais quelques "printf" judicieux de tes variables de position pour pister le problème ...
    Bonjour,
    je dirais même plus, c'est l'occasion idéale pour commencer à utiliser un debugger

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 72
    Par défaut
    Salut et ok, i'm ready kwariz

    Je ne me suis jamais penché dessus encore, en quoi est-ce qu'il va m'aider et justement pour ce problème?

    merci de vos réponses

  7. #7
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    L'idée de base (que ce soit avec les printf ou le debugger) est de pouvoir suivre lors du déroulement du programme les valeurs prises par tes variables.
    Tu as des doutes sur quelques fonctions ? Tu insères un breakpoint, lors de l'exécution ton programme s'arrêtera et tu pourras à loisir étudier l'évolution de différentes variables avec une exécution pas à pas ...
    Tout va dépendre de ton environnement (os, ide, compilo, etc ...) mais cela ressemble toujours à ça : on exécute pas à pas pour cibler toujours plus précisément l'origine du (ou des) bug jusqu'à le trouver.

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

Discussions similaires

  1. Passer mon menu déroulant au dessus du reste !
    Par u115rcu dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 17/03/2008, 22h01
  2. Changer la valeur de mon menu déroulant
    Par cdevl32 dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 21h24
  3. Problème de compatibilité pour mon menu déroulant
    Par tidus_6_9_2 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 29/01/2008, 14h29
  4. Mon menu déroulant ne se ferme pas lorsqu'on quitte le champ
    Par sweety107 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/06/2007, 19h41
  5. Mon menu déroulant "wizz" sous IE
    Par koskoz dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/06/2007, 11h10

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