为什么SDL_RenderCopy这么长?

问题描述

我正在使用C中的SDL2创建游戏,但是我遇到了一个问题,实际上我正在做游戏的主菜单:我的菜单上有3个按钮,当我将鼠标放到鼠标上时我希望它们变红在它们上面,所以我要做的是为整个屏幕预加载了4个SDL_Textures:一个SDL_Textures的所有按钮均未着色,而其他3个按钮则是相同的主菜单,每个按钮均以红色突出显示,我认为这比更改每次都使用按钮颜色和重新创建纹理,但是当我将鼠标放在按钮上时,它们传递红色的速度确实非常慢,每次屏幕更新时我都只使用SDL_Rendercopy和SDL_RenderPresent,所以它不应该那么长。这是我的功能代码和程序图片,可以使您更好地理解。 (对不起,英语不好)

enter image description here

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 (将#修改为@)