gpt4 book ai didi

C SDL 键盘事件 SDL_KEYUP 按键按下时触发

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:38 25 4
gpt4 key购买 nike

我在 C 中使用 SDL,我试图让一个角色在按下某个键时在屏幕上移动,并在它被释放时停止,但看起来好像是在按下键时触发了 KEYUP 事件仍然被压制。如果我删除 pressed() 中的 KEYUP 部分,字符将在屏幕上滑动,但显然不会自行停止。如果我保留 KEYUP 部分,我必须反复按下该键才能在屏幕上移动它们。知道我做错了什么吗?

这是我所拥有的:

...

int done = 0;
while (done==0)
{
pressed();
if (kenter == 1)
{
state = 1;
subscreen();
}
if (kescape == 1)
{
done = 1;
}
if (kup == 1)
{
playery += -2;
}
if (kdown == 1)
{
playery += 2;
}

if (kright == 1)
{
playerx += 2;
}
if (kleft == 1)
{
playerx += - 2;
}

...

int pressed ()
{

SDL_Event keyevent;

while (SDL_PollEvent(&keyevent))
{
switch(keyevent.type)
{
case SDL_KEYDOWN:
switch(keyevent.key.keysym.sym)
{
case SDLK_RETURN:
{
kenter = 1;
break;
}
case SDLK_ESCAPE:
{
kescape = 1;
break;
}
case SDLK_a:
{
ka = 1;
break;
}
case SDLK_s:
{
ks = 1;
break;
}
case SDLK_UP:
{
kup = 1;
break;
}
case SDLK_DOWN:
{
kdown = 1;
break;
}
case SDLK_RIGHT:
{
kright = 1;
break;
}
case SDLK_LEFT:
{
kleft = 1;
break;
}
default:
break;
}
}
switch(keyevent.type)
{
case SDL_KEYUP:
switch(keyevent.key.keysym.sym)
{
case SDLK_RETURN:
{
kenter = 0;
break;
}
case SDLK_ESCAPE:
{
kescape = 0;
break;
}
case SDLK_a:
{
ka = 0;
break;
}
case SDLK_s:
{
ks = 0;
break;
}
case SDLK_UP:
{
kup = 0;
break;
}
case SDLK_DOWN:
{
kdown = 0;
break;
}
case SDLK_RIGHT:
{
kright = 0;
break;
}
case SDLK_LEFT:
{
kleft = 0;
break;
}
default:
break;
}
}
}
return 0;
}

最佳答案

我认为您的 switch 语句已损坏。

使用这种不那么困惑的方式

int pressed ()
{

SDL_Event event;

while(SDL_PollEvent(&event) )
{
if(event.type == SDLK_KEYDOWN)
{
switch(event.key.keysym.sym)
{
case SDLK_RETURN:
doStuff = 1
break;
default:
break;
}
}
if(event.type == SDLK_KEYUP)
{
switch(event.key.keysym.sym)
{
case SDLK_RETURN:
doStuff = 0;
break;
default:
break;
}
}
}
}

同样重要的是:

SDL Tutorials: Practical Keyboard Input

哦,避免使用全局变量!

关于C SDL 键盘事件 SDL_KEYUP 按键按下时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102348/

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