问题描述
我正在使用C中的SDL2创建游戏,但是我遇到了一个问题,实际上我正在做游戏的主菜单:我的菜单上有3个按钮,当我将鼠标放到鼠标上时我希望它们变红在它们上面,所以我要做的是为整个屏幕预加载了4个SDL_Textures:一个SDL_Textures的所有按钮均未着色,而其他3个按钮则是相同的主菜单,每个按钮均以红色突出显示,我认为这比更改每次都使用按钮颜色和重新创建纹理,但是当我将鼠标放在按钮上时,它们传递红色的速度确实非常慢,每次屏幕更新时我都只使用SDL_Rendercopy和SDL_RenderPresent,所以它不应该那么长。这是我的功能代码和程序图片,可以使您更好地理解。 (对不起,英语不好)
typedef struct s_sdlVar
{
SDL_Window *window;
SDL_Renderer *renderer;
SDL_Event event;
SDL_Texture *mainMenu[MAIN_MENU_TEXTURE_COUNT];
t_rect mainMenuButtonRect[MAIN_MENU_OPTION_COUNT];
t_res screenResolution;
int BoxSiz;
t_byte difficulty;
} t_sdlVar;
static int checkButtonPos(t_rect *buttonPos,int x,int y)
{
for (int i = 0; i < MAIN_MENU_OPTION_COUNT; i++)
if ((x >= buttonPos[i].x) && (x < buttonPos[i].x + buttonPos[i].w)
&& (y >= buttonPos[i].y) && (y < buttonPos[i].y + buttonPos[i].h))
return (i + 1);
return (0);
}
int displayMainMenu(t_sdlVar *sdl)
{
t_bool exit = false;
t_bool isButtonOn = false;
int textureIndex = 0,buttonIndex = 0;
if (SDL_Rendercopy(sdl->renderer,sdl->mainMenu[0],NULL,NULL))
return (-1);
SDL_RenderPresent(sdl->renderer);
while (!exit)
if (SDL_PollEvent(&sdl->event))
{
if (sdl->event.type == SDL_MOUSEMOTION)
{
if ((textureIndex = checkButtonPos(sdl->mainMenuButtonRect,sdl->event.motion.x,sdl->event.motion.y)))
{
if (SDL_Rendercopy(sdl->renderer,sdl->mainMenu[textureIndex],NULL))
return (-1);
SDL_RenderPresent(sdl->renderer);
isButtonOn = true;
}
else if (isButtonOn)
{
if (SDL_Rendercopy(sdl->renderer,NULL))
return (-1);
SDL_RenderPresent(sdl->renderer);
isButtonOn = false;
}
}
else if ((sdl->event.type == SDL_QUIT) || ((sdl->event.type == SDL_MOUSEBUTTONDOWN) && isButtonOn && (textureIndex == 2)))
exit = true;
}
return (buttonIndex);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)