禁用鼠标/光标检测



我正在制作一个简单的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);
}

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

最新更新