【发布时间】:2017-05-12 09:50:57
【问题描述】:
我发布了我认为相关的部分代码。我正在尝试通过 SDL_TTF 为我的菜单绘制一些文本。每次单击按钮时,我都会从服务器获取一串字符。 “I1P1I2P1I3P1I4P1I5P1I6P1I7P1I8P1I9P1”之类的东西,“I1”表示大厅 1,P1 表示连接了 1 个玩家。但是我只想打印出“I1”然后有一堆空间说200像素然后打印出“P1”然后跳到下一行打印“I2”和“P1”。我尝试了文本变形,但它忽略了它并打印出整行文本。其次,我如何才能在“I1”和“P1”之间打印空格。有没有更简单/有效的方法来通过数组中的 SDL_TTF 打印文本?
typedef struct
{
Menu menu;
SDL_Texture *label;
SDL_Renderer *rendererMenu;
TTF_Font *font;
char *lobbyResponse;
} MenuState;
void dispayText(char *text, MenuState *menu)
{
SDL_Color color = {255, 255, 255, 255};
SDL_Surface *surface = TTF_RenderText_Blended_Wrapped(menu->font, text, color, 4);
menu->label = SDL_CreateTextureFromSurface(menu->rendererMenu, surface);
menu->menu.labelW = surface->w;
menu->menu.labelH = surface->h;
//pos.x = x;
//pos.y = y;
SDL_FreeSurface(surface);
}
int processEventsMenu(SDL_Window *window, MenuState *menu, TCPsocket *tcpsock)
{
SDL_Event ev;
menu->lobbyResponse = malloc(sizeof(char[1024])); // <- moved it here for clarity
while (SDL_PollEvent(&ev))
{
switch(ev.type)
{
case SDL_MOUSEBUTTONDOWN:
if (ev.button.button == SDL_BUTTON_LEFT)
{
SendLobbyMessage(tcpsock, refreshCommand);
ReceiveLobbyMessage(tcpsock, menu->lobbyResponse);
printf("Created lobby with id: %c\n",menu->lobbyResponse[0]);
dispayText(menu->lobbyResponse, menu);
printf("Lobbys: %c\n", menu->lobbyResponse[0]);
}
}
}
}
【问题讨论】:
-
执行程序时机器不会考虑不在函数内部的代码。您在函数
displayText和processEventsMenu之间有一行代码。 -
nounoursnoir 实际上我只是剥离了很多代码。您引用的代码在另一个函数中退出。我只是想包含它,以便您可以看到我正确地初始化了它。
-
mm 好的,但我认为您应该将这行代码与您编写的代码块分开编写,并说明这是一个需要注意的重要细节,来自程序中的另一个函数。对我来说,这看起来像是一段毫无意义的代码。