J'ai récemment programmé un petit jeu d'aventure textuel utilisant SDL2 et j'ai rencontré un problème avec le retour à la ligne. J'utilise TTF_RenderText_Blended_Wrapped() pour rendre mes chaînes, ce qui me donne des lignes joliment emballées. Mais la hauteur de la ligne est un problème, les lignes semblent collées ensemble, et des lettres comme 'jqg' se chevauchent avec des lettres comme 'tli'.SDL TTF - Enroulement de ligne et changement de hauteur des lignes enroulées?
Est-ce que quelqu'un sait s'il existe un moyen de changer la hauteur de la ligne? TTF_RenderText_Blended_Wrapped() n'est toujours pas dans la documentation de SDL_ttf. Devrais-je simplement écrire ma propre fonction d'emballage de texte?
La taille de la police est 16pt, le style est TTF_STYLE_BOLD et la police peut être trouvée here. Le code ci-dessous devrait reproduire l'erreur, il n'y a presque pas de vérification d'erreur, utilisez à vos risques et périls. Voici la sortie du code:
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
int main(int argc, char *argv[]) {
SDL_Window *gui;
SDL_Surface *screen, *text;
SDL_Event ev;
TTF_Font *font;
int running = 1;
const char *SAMPLETEXT = "This is an example of my problem, for most lines it works fine, albeit it looks a bit tight. But for any letters that \"hang\" below the line, there is a chance of overlapping with the letters below. This isn\'t the end of the world, but I think it makes for rather cluttered text.\n\nNotice the p and k on line 1/2, and the g/t on 2/3 and 3/4.";
// init SDL/TTF
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
// Open and set up font
font = TTF_OpenFont("Anonymous.ttf", 16);
if(font == NULL) {
fprintf(stderr, "Error: font could not be opened.\n");
return 0;
}
TTF_SetFontStyle(font, TTF_STYLE_BOLD);
// Create GUI
gui = SDL_CreateWindow("Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
640, 480, SDL_WINDOW_SHOWN);
// Grab GUI surface
screen = SDL_GetWindowSurface(gui);
// Clear screen black
SDL_FillRect(screen, NULL, 0);
// Draw some text to screen
SDL_Color color = {0xff, 0xff, 0xff, 0xff};
text = TTF_RenderText_Blended_Wrapped(font, SAMPLETEXT, color, screen->w);
SDL_BlitSurface(text, NULL, screen, NULL);
while(running) { // Main loop
while(SDL_PollEvent(&ev)) {
switch(ev.type){
case SDL_QUIT:
running = 0;
break;
}
}
SDL_UpdateWindowSurface(gui); // Refresh window
SDL_Delay(20); // Delay loop
}
// Destroy resources and quit
TTF_CloseFont(font);
TTF_Quit();
SDL_FreeSurface(text);
SDL_DestroyWindow(gui);
SDL_Quit();
return 0;
}
Je ne vois pas qu'il y ait un moyen de contrôler l'espacement des lignes. [Voici un lien vers le code source] (https://fossies.org/dox/SDL2_ttf-2.0.14/SDL__ttf_8c_source.html#l01876). Avez-vous essayé une police différente? Avez-vous comparé les valeurs renvoyées par 'TTF_FontHeight()' et 'TTF_FontLineSkip()'? –
Merci pour le lien. Le saut de ligne est supérieur à la hauteur, et j'ai essayé quelques polices. Je suis sûr qu'il y a une police quelque part qui fonctionnera, mais je préfère ne pas aller chercher. –
Pouvez-vous poster la police que vous utilisez? J'ai essayé avec quelques polices sur mon système et n'ai pas pu reproduire le problème. – Tim