PB de pointeur et SDL et TTF

Signaler
-
 Utilisateur anonyme -
Hello all,

Voilou le sujet, un jeu de tir, quand la souris se trouve en haut a gauche et que l'on tire(clic gauche), c'est a dire if (event.motion.x < 100 && event.motion.y < 100 && event.button.button == SDL_BUTTON_LEFT),
 la je veux ecrire avec la librairie TTF au fur et a mesure des clics le score sur l'écran:
or j'ai un probleme, parfois ca m'affiche n'importequoi, genre 0,a,f,/,),*,0,... donc a mon avis je lis une zone de mémoire qui n'est pas la bonne ^^, et donc voilou mon probleme, car mon compteur, qui est un entier, dois etre ecrit par la suite avec la fonction TTF:

texte = TTF_RenderText_Blended(police, &cpt, couleurbleu); //Ecriture du texte dans la SDL_Surface "texte"

mais voila: warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int ** '
               warning C4024: 'TTF_RenderText_Blended' : different types for formal and actual parameter 2

Donc je ne sais pas comment declarer mon compteur avec les pointeurs les * et les & pour ecrire et incrémenter

 int *cpt = NULL;

    while (continuer)
    {
        SDL_WaitEvent(&event);


  if (event.motion.x < 100 && event.motion.y < 100 && event.button.button == SDL_BUTTON_LEFT)
  {
   FSOUND_PlaySound(FSOUND_FREE, tir2);
   cpt = cpt + 1;
      texte = TTF_RenderText_Blended(police, &cpt, couleurbleu); //Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal)
  }

    SDL_BlitSurface(texte, NULL, ecran, &positionTexte); //Blit du texte par-dessus

merci d'avance

8 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Un pointeur est fait pour pointer sur une zone mémoire. Or ici ton poiteur ne pointe sur absolument rien et quand tu fait cpt++ tu te trouve simplement à avancer en mémoire. Ce qu'il faudrait faire c'est déclarer ton cpt en int simplement:

int cpt = 0;

Je ne sais pas comment fonctionne TTF_RenderText_Blended mais d'après l'avertissement, il prend un char en second paramètre ce qui signifie que tu devra convertir ton int en char* pour ensuite passer le char* en paramètre de ta fonction. Normalement, on peut utiliser _itoa (sur VC05) pour la convertion.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
"quand tu fait cpt++ tu te trouve simplement à avancer en mémoire"

En réalité, tu n'avance pas vraiment. Tu ne fait qu'incrémenter l'adresse que contien le pointeur. C'est l'adresse contenue dans le pointeur qui "avance" en mémoire.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Le troisième argument de TTF_RenderText_Blended est un const char *, donc on voit pas trop le rapport
cpt devrait donc être un tableau de caractères. Par exemple:

const char text[32];
int cpt = 0;

    while (continuer)
    {
        SDL_WaitEvent(&event);   if (event.motion.x < 100 && event.motion.y < 100 && event.button.button == SDL_BUTTON_LEFT)
  {
   FSOUND_PlaySound(FSOUND_FREE, tir2);
   itoa(cpt++, text, 10); // Conversion de l'entier en chaine de caractères
     
texte = TTF_RenderText_Blended(police, text, couleurbleu);
//Ecriture du texte dans la SDL_Surface "texte" en mode Blended
(optimal)
  }

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Le second argument tu veux dire?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Oui (enfin le deuxième, car le second signifierait qu'il n'y a que deux paramètres)

_____________________________________
Un éditeur de ressources gratuit pour Windows

yep, merci à tous les 2, cependant j'ai 2 petis warnings:
C:\Program Files\Microsoft Visual Studio\MyProjects\testsdl\ecrantir.c(84) : warning C4090: 'function' : different 'const' qualifiers
C:\Program Files\Microsoft Visual Studio\MyProjects\testsdl\ecrantir.c(84) : warning C4024: 'itoa' : different types for formal and actual parameter 2

qué ???
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Oui j'ai déliré, faut mettre
char text[32];

_____________________________________
Un éditeur de ressources gratuit pour Windows

ouais! et moi comme un con j'ai même pas vu cette erreur, ralala :(