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 :

SDL et affichage de variable


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut SDL et affichage de variable
    Bonjour tout le monde !!

    Je cherche une fonction telle que printf("%f",f) qui me premettrait d'afficher le resultat d'un calcul dans ma fenetre SDL.
    J'ai essaye avec la fonction TextRender mais ca ne marche pas :s
    Pb d'assignements pointeur.
    J'ai fait ca :
    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
    const char calcul1_x1()
    {
     
     
     int num_carre;
     int num;
     int den;
     
     num_carre = n1-n3 ;
     num = sqrt(num_carre);//fonction racine carre
     den = n1*(sqrt(n3));
     x1 = num/den ;
     c = x1/(2*3.14116*n2);
     pointeur = &c;
     *pointeur = c;
     return (*pointeur);
     
     
    }
    et ca dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_result = TTF_RenderText_Blended(police, pointeur, couleurRouge);
    et ca me donne ca :
    102 H:\Divers\Dev-Cpp\leprojetquitu\enter_parameter_R\devcpp\gtkottawa3.c [Warning] assignment from incompatible pointer type
    103 H:\Divers\Dev-Cpp\leprojetquitu\enter_parameter_R\devcpp\gtkottawa3.c assignment of read-only location


    alors j'ai surment mal du faire ma declaration de pointeur mais je ne vois pas trop !
    Merci d'avance

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Deux problèmes :

    Citation Envoyé par Emyleet
    J'ai fait ca :
    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
    const char calcul1_x1()
    {
     
     
     int num_carre;
     int num;
     int den;
     
     num_carre = n1-n3 ;
     num = sqrt(num_carre);//fonction racine carre
     den = n1*(sqrt(n3));
     x1 = num/den ;
     c = x1/(2*3.14116*n2);
     pointeur = &c;
     *pointeur = c;
     return (*pointeur);
     
     
    }
    Code entièrement inutile...

    Que voulez-tu faire avec ce code? et montre un peu plus comment tu appelles cette fonction... De nouveau, un code minimal, compilable qui expose le problème est toujours mieux...

    et ca dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_result = TTF_RenderText_Blended(police, pointeur, couleurRouge);
    et ca me donne ca :
    102 H:\Divers\Dev-Cpp\leprojetquitu\enter_parameter_R\devcpp\gtkottawa3.c [Warning] assignment from incompatible pointer type
    103 H:\Divers\Dev-Cpp\leprojetquitu\enter_parameter_R\devcpp\gtkottawa3.c assignment of read-only location


    alors j'ai surment mal du faire ma declaration de pointeur mais je ne vois pas trop !
    Merci d'avance
    D'abord faut résoudre ton premier problème mais es-tu sûr de bien initialiser la bibliothèque SDL_ttf et d'avoir la police dans un répertoire accessible par le programme (lorsque tu créés la police?)...
    Jc

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    c = x1/(2*3.14116*n2);
    pointeur = &c;
    *pointeur = c;
    return (*pointeur);

    A priori, tu retournes un int et pas un char... Ou sinon, il y a eu une conversion, mais mal réalisée.
    Je ne répondrai à aucune question technique en privé

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    Oui excusez moi mon code n'etait pas tres explicite, voici ce que j'aimerais faire:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <SDL/SDL.h>//librairie graphique SDL
    #include <SDL/SDL_ttf.h>//librairie graphique SDL_ttf permettant d'ecrire du texte
    #include <gtk/gtk.h>// librairie graphique GTK toolkit
     
     
    float x1,c;
    int n1,n2,n3,n4;
    const char *pointeur;
    int continuer = 1;//booleen pour le boucle
    SDL_Event event;// variable permettant de gerer les evenements 
    SDL_Color couleurRouge = {255, 0, 0};
     
    const char calcul1_x1()
     
    {
     
     
     int num_carre;
     int num;
     int den;
     
     num_carre = n1-n3 ;
     num = sqrt(num_carre);//fonction racine carre
     den = n1*(sqrt(n3));
     x1 = num/den ;
     c = x1/(2*3.14116*n2);
     pointeur = &c;
     *pointeur = c;
     return (*pointeur);
     
     
    }
    int main(int argc, char *argv[])
    {
    TTF_Font *police = NULL;
    SDL_Surface *ecran_a1 = NULL,*texte_result = NULL;
    SDL_Rect position;
     
    //initSDL();
    SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
    //initCouleurs() ;//initialise le tableau de couleurs
    TTF_Init(); // Initialisation (peut être avant ou après SDL_Init) 
     
    gtk_init(&argc, &argv);// Initialisation de GTK+ 
     
    SDL_WM_SetIcon(SDL_LoadBMP("sdl_icone.bmp"), NULL);// Chargement de l'icône AVANT SDL_SetVideoMode 
    ecran_a1=SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE); // Ouverture de la fenêtre  
     
    //Chargement de la police 
    police = TTF_OpenFont("PIXEARG_.ttf",18);
    //Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) 
    //printf("the values of your components are C=%f",c);
    texte_result = TTF_RenderText_Blended(police, pointeur, couleurRouge);
    position.x = 60;
    position.y = 370;
    SDL_BlitSurface(texte_result, NULL, ecran_a1, &position); /* Blit du texte par-dessus */
    SDL_Flip(ecran_a1);
     
    while (continuer != 0)
        {
            SDL_WaitEvent(&event);//recuperation de l'evenement dans event
            switch(event.type)//test du type d'evenement
            {
                case SDL_QUIT:
                    continuer = 0;
                    break; 
                case SDL_KEYDOWN: switch (event.key.keysym.sym)
                                         {
                                            case SDLK_r: // Appui sur la touche r,retour menu
                                            continuer = 0;
                                            break;                                  
                                            case SDLK_ESCAPE://appui sur la touche escape ,quitte le programme
                                            continuer = 0;
                                            break;
     
                                            }
                break;  
                }
                }
        TTF_Quit();//fermeture de la bibliotheque
     
     
       SDL_Quit(); // Arrêt de la SDL
     
       return(0);
     
     
            }
    il faut que je passe ma variable c en const char pour pouvoir l'utiliser dans ma fonction Textrender.

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Beaucoup de choses à critiquer et je pense que tu devrais revoir ton C...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    float x1,c;
    int n1,n2,n3,n4;
    const char *pointeur;
    int continuer = 1;//booleen pour le boucle
    SDL_Event event;// variable permettant de gerer les evenements 
    SDL_Color couleurRouge = {255, 0, 0};
    Autant de variables globales??? Cela est mauvais usage et en principe, on devrait arrêter de lire ton 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
     
    const char calcul1_x1()
    {
     int num_carre;
     int num;
     int den;
     
     num_carre = n1-n3 ;
     num = sqrt(num_carre);//fonction racine carre
     den = n1*(sqrt(n3));
     x1 = num/den ;
     c = x1/(2*3.14116*n2);
     pointeur = &c;
     *pointeur = c;
     return (*pointeur);
    }
    Une fonction qui retourne un const... Je ne vois pas l'utilité et si tu compilais avec -Wall tu aurais :

    warning: type qualifiers ignored on function return type
    Ensuite tu as un pointeur de type char* et tu le fais pointer sur un flottant??

    Enfin, tu penses qu'au niveau du processeur la représentation binaire d'une chaîne "3.14234" est pareille que la représentation du nombre flottant 3.14234?

    Encore une fois, une relecture de ton cours de C serait utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ecran_a1=SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE); // Ouverture de la fenêtre
    Et le test sur le retour de la fonction SDL_SetVideoMode? Il faut toujours tester le retour!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Chargement de la police 
    police = TTF_OpenFont("PIXEARG_.ttf",18);
    Et le retour?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) 
    //printf("the values of your components are C=%f",c);
    texte_result = TTF_RenderText_Blended(police, pointeur, couleurRouge);
    Et le retour? De plus, ton pointeur est foireux, cf plus haut...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (continuer != 0)
        {
            SDL_WaitEvent(&event);//recuperation de l'evenement dans event
    On utilise SDL_PollEvent plutôt que SDL_WaitEvent pour éviter une attente inutile... Du coup faudra changer le reste... Voir les exemples SDL que tu peux trouver ici : http://jeux.developpez.com/tutoriels/#a_sdl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            switch(event.type)//test du type d'evenement
            {
             ...
             }
    Et le cas default? Tout bon compilateur (bien configuré) aurait gueuler ici...

    il faut que je passe ma variable c en const char pour pouvoir l'utiliser dans ma fonction Textrender.
    Tu peux utiliser une chaîne de caractères sans le mot clé const si tu le souhaites... Le compilateur acceptera... Un pointeur const signifie que la fonction ne modifiera pas la zone pointée...

    Jc

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    lool sympa ta reponse ca donne envie de continuer a coder ....
    Si j'ai autant de variable global c'est que je m'en sers dans d'autres fonctions de mon code qui fait 1000 lignes.
    Je ne t'ai pas mis tout les retours qui sont effectivement bien presents dans mon code mais je me suis dit que ca ne te servira pas beaucoup pour voir l'erreur du pointeur.
    Merci pour tes conseils qui ne ciblent malheureusement pas mon probleme d'affichage.

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Emyleet
    Merci pour tes conseils qui ne ciblent malheureusement pas mon probleme d'affichage.
    Ah bon?

    Voici ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     *pointeur = c;
     return (*pointeur);
    1)
    Ensuite tu as un pointeur de type char* et tu le fais pointer sur un flottant??
    2)
    Enfin, tu penses qu'au niveau du processeur la représentation binaire d'une chaîne "3.14234" est pareille que la représentation du nombre flottant 3.14234?
    Je t'assure que cela vient de là...

    Utilise plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char s[128];
    sprintf(s,"%f",c);
    texte_result = TTF_RenderText_Blended(police, s, couleurRouge);
    Et enlève ces variables globales ou mets les dans une structure globales et donne des noms plus explicites...

    Jc

Discussions similaires

  1. Affichage de variables de SESSION
    Par yoan_111 dans le forum ASP
    Réponses: 2
    Dernier message: 24/04/2006, 11h15
  2. problème d'affichage de variable
    Par sam01 dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 00h20
  3. Réponses: 3
    Dernier message: 02/03/2006, 19h22
  4. Affichage menu variable
    Par mosquitout dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/12/2005, 14h50
  5. [RegEx] Preg_replace et affichage de variable
    Par xperienss dans le forum Langage
    Réponses: 6
    Dernier message: 13/10/2005, 13h26

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