PB de pointeur et SDL et TTF

Utilisateur anonyme - 22 août 2006 à 16:46
 Utilisateur anonyme - 22 août 2006 à 19:45
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 août 2006 à 17:07
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
<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 août 2006 à 17:17
"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
<!--
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
22 août 2006 à 18:02
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 août 2006 à 18:06
Le second argument tu veux dire?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
22 août 2006 à 18:11
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
0
Utilisateur anonyme
22 août 2006 à 18:45
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é ???
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
22 août 2006 à 19:01
Oui j'ai déliré, faut mettre
char text[32];

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Utilisateur anonyme
22 août 2006 à 19:45
ouais! et moi comme un con j'ai même pas vu cette erreur, ralala :(
0