bonjour, j'ai un probleme avec ttf
Je programme un remake de flappy bird pour cela j'ai une boule principal dans laquelle toute les 1,5 secondes j’insère une tuyau (image).
Dans cette boucle principal j'affiche aussi le score grâce a une texture que je créer a l'aide de SDL_TTF.
Quand je lance le jeu sans dessiner le texte du score tout fonctionne bien et mes tuyaux s'affiche comme il faut, mais si de dessine le texte du score grâce à la méthode ci-dessous, certain tuyaux ne s'affichent pas. Je pète les plombs je comprend pas d'où viens le problème.
Le code que j'utilise pour générer la texture d'une image pour créer mes tuyaux :
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 void Text::Dessiner() { // Créer la texture surface = TTF_RenderText_Blended(font,text.c_str(),color); texture = SDL_CreateTextureFromSurface(rendu,surface); // Récupérer la taille de la texture SDL_QueryTexture(texture,NULL,NULL,&position.w,&position.h); // Copier la texture dans le rendu SDL_RenderCopyEx(rendu,texture,NULL,&position,angle,NULL,flip); // Supprime surface et texture SDL_DestroyTexture(texture); SDL_FreeSurface(surface); }
le code que j'utilise pour créer mes tuyaux:
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 Image::Image(const char *chemin, SDL_Renderer *ptr_rendu) { rendu = ptr_rendu; SDL_SetRenderDrawColor(rendu,0,0,0,0); // Charger image avec une transparence SDL_Surface *surface = SDL_LoadBMP(chemin); SDL_SetColorKey(surface,SDL_TRUE,SDL_MapRGB(surface->format,255,0,255)); texture = SDL_CreateTextureFromSurface(rendu,surface); SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); // Recuperer la taille SDL_QueryTexture(texture,NULL,NULL,&position.w,&position.h); SDL_QueryTexture(texture,NULL,NULL,&calque.w,&calque.h); // liberer mémoire de la surface SDL_FreeSurface(surface); }
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 // toute les 1,5 secondes je créer un nouveau tuyau if(apparition.Check_time(1500)) { liste_tuyaux.push_back(new Image("images/tuyau-min.bmp",rendu)); liste_tuyaux.back()->Echelle(3.5); liste_tuyaux.back()->Positioner(800,liste_tuyaux.back()->Nombre_aleatoire(-380,-170)); // -380 position minimum et -170 SDL_Rect *position = liste_tuyaux.back()->GetPosition(); liste_collisions.push_back(new SDL_Rect{position->x,position->y,105,476}); liste_collisions.push_back(new SDL_Rect{position->x,position->y+476+147,105,476}); liste_validation.push_back(new SDL_Rect{position->x + 52, position->y + 476, 1, 147}); }
Partager