禁用鼠标/光标检测
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);
}
这样您每帧只处理一次键盘输入,而不是每个事件一次。
我正在制作一个简单的 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);
}
这样您每帧只处理一次键盘输入,而不是每个事件一次。