C에서 SDL을 사용하고 있으며 키를 누를 때 화면에서 문자 이동을 시도하고 키를 놓을 때 중지하려고 시도하지만 KEYUP 이벤트가 키가 여전히 눌러져있을 때 트리거되는 경우. pressed()에서 KEYUP 섹션을 제거하면 문자가 화면을 가로 질러 슬라이드되지만 분명히 독자적으로 멈추지는 않습니다. KEYUP 섹션을 안으로두면 키를 반복해서 눌러 화면을 가로 질러 이동해야합니다. 내가 뭘 잘못하고 있는지 알 겠어?C SDL 키보드 이벤트 SDL_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 문의 여분의 중괄호는 드문 경우이며 코드를 읽는 것이 더 어려워집니다. –