gpt4 book ai didi

c - sdl 不断按键

转载 作者:行者123 更新时间:2023-11-30 17:01:59 25 4
gpt4 key购买 nike

我目前正在 SDL(PONG 克隆)中编写一个简单的游戏,其中我必须连续按键。

我遇到的问题是,当我按下按钮时,它会使用react,等待一小段时间,然后继续连续按键。

我想知道如何让那一点延迟消失。

这是我的代码:

while (running)
{
while (SDL_PollEvent(&event))
{
//update the game
if (event.type == SDL_QUIT)
{
quit_game();
running = false;
}

if(event.type == SDL_KEYDOWN)
{
switch (event.key.keysym.sym)
{

case SDLK_DOWN:
move_paddle(UP);
break;

case SDLK_UP:
move_paddle(DOWN);
break;

default:

break;
}
}
}
draw_game();
move_ball();
SDL_Delay(15);
}

最佳答案

我做的第一件事是我想消除小的延迟并使桨的运动更平滑。我引入了 2 个新的全局 bool 变量来跟踪按下的键。

bool key_up = false;
bool key_down = false;

我用 false 值启动它们,因为当前没有按下任何键。

在我的开关中,我设置了这些 bool 变量的值以匹配当前按下的内容。

        if(event.type == SDL_KEYDOWN)
{
switch (event.key.keysym.sym)
{

case SDLK_DOWN:
key_up = true;
key_down = false;
break;

case SDLK_UP:
key_down = true;
key_up = false;
break;

default:

break;
}
}

然后在第一个 while 循环中,我为可以按下的两个键创建两个 if-case,并在这些 if-case 中调用移动函数。

    if (key_up)
move_paddle(UP);
else if (key_down)
move_paddle(DOWN);

当我这样做时,延迟消失了,桨的运动很平稳,但它也产生了另一个问题,桨无法在一个地方保持静止(边界除外)。然后我意识到代码只是寻找按下的键,而不对释放的键使用react。

然后我发现,如果释放某个键(在本例中是向上键或向下键),则两个 bool 值必须设置为 false,因为没有按下任何键。

我所做的是在 if(event.type == SDL_KEYDOWN) 之后创建另一个 if 语句,如果没有按下任何键,该语句将禁用桨的移动。

        if (event.type == SDL_KEYUP)
{
key_down = false;
key_up = false;
}

当我在代码中实现所有这些时,游戏就像一个魅力。

对于那些感兴趣的人,这是我新的最终代码:

int gameloop()
{
SDL_Event event;
bool running = true;
bool key_up = false;
bool key_down = false;

while (running)
{
while (SDL_PollEvent(&event))
{
//update the game
if (event.type == SDL_QUIT)
{
quit_game();
running = false;
}

if(event.type == SDL_KEYDOWN)
{
switch (event.key.keysym.sym)
{

case SDLK_DOWN:
key_up = true;
key_down = false;
break;

case SDLK_UP:
key_down = true;
key_up = false;
break;

default:

break;
}
}

if (event.type == SDL_KEYUP)
{
key_down = false;
key_up = false;
}
}
if (key_up)
move_paddle(UP);
else if (key_down)
move_paddle(DOWN);

move_ball();
ai_paddle_move();
draw_game();
printf("Player: %d | AI: %d\n", player, ai);
SDL_Delay(15);
}

return 1;
}

关于c - sdl 不断按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com