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
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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)
}
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