禁用鼠标/光标检测

Disable mouse / cursor detection

我正在制作一个简单的 Pong 游戏。

当我运行程序的时候,所有的动作都很完美(动作不快也不慢)

但是,当我四处移动光标时,移动速度更快,这让游戏变得更加困难。

while (enable_loop)
        {
            Ticks = SDL_GetTicks();
            while (SDL_PollEvent(&any_event))
            {
                if (any_event.type == SDL_QUIT)
                {
                    enable_loop = false;
                }

                // Process keyboard event
                keyPressed = SDL_GetKeyboardState(NULL);

                if (keyPressed[SDL_SCANCODE_ESCAPE])
                {
                    enable_loop = false;
                }
                if (keyPressed[SDL_SCANCODE_UP] )
                {
                    player2.Update(25);
                }
                if (keyPressed[SDL_SCANCODE_DOWN])
                {
                    player2.Update(-25);
                }
                if (keyPressed[SDL_SCANCODE_W])
                {
                    player1.Update(20);
                }
                if (keyPressed[SDL_SCANCODE_S])
                {
                    player1.Update(-20);
                }
            }
            Grouping.update(surface, background);
            SDL_UpdateWindowSurface(window);
            limitFPS(Ticks);
        }
    }

注意:我试过SDL_Delay(5)但是动作太笨拙而且跳来跳去,无法使用:/

这个游戏不需要鼠标,我可能会拔掉鼠标,但我问这个是为了我的经验和知识。

我使用了 SDL_ShowCursor(SDL_DISABLE)SDL_CaptureMouse(SDL_FALSE) 并将我的 FPS 限制为 60。

效果减弱但仍然很明显。

如何禁用鼠标检测或任何会停止效果的代码?

keyPressed 检查移出 SDL_PollEvent() 循环:

while (enable_loop)
{
    Ticks = SDL_GetTicks();
    while (SDL_PollEvent(&any_event))
    {
        if (any_event.type == SDL_QUIT)
        {
            enable_loop = false;
        }
    }

    // Process keyboard event
    keyPressed = SDL_GetKeyboardState(NULL);

    if (keyPressed[SDL_SCANCODE_ESCAPE])
    {
        enable_loop = false;
    }
    if (keyPressed[SDL_SCANCODE_UP] )
    {
        player2.Update(25);
    }
    if (keyPressed[SDL_SCANCODE_DOWN])
    {
        player2.Update(-25);
    }
    if (keyPressed[SDL_SCANCODE_W])
    {
        player1.Update(20);
    }
    if (keyPressed[SDL_SCANCODE_S])
    {
        player1.Update(-20);
    }

    Grouping.update(surface, background);
    SDL_UpdateWindowSurface(window);
    limitFPS(Ticks);
}

这样您每帧只处理一次键盘输入,而不是每个事件一次。