我目前正在开发服务器 - 客户端游戏,但我遇到了SDL2事件队列问题。以下代码用于移动角色:
void handleEvent( SDL_Event& e) {
if( e.type == SDL_KEYDOWN ) {
switch( e.key.keysym.sym ) {
case SDLK_LEFT:
// Do something and send key to server
break;
case SDLK_RIGHT:
// Do something and send key to server
break;
case SDLK_UP:
// Do something and send key to server
break;
}
}
else if( e.type == SDL_KEYUP ) {
switch( e.key.keysym.sym ) {
case SDLK_LEFT:
// Do something and send key to server
break;
case SDLK_RIGHT:
// Do something and send key to server
break;
case SDLK_UP:
// Do something and send key to server
break;
}
}
}
当按住某个键时,似乎存在某种事件缓冲区。基本上,如果我快速点击箭头键,键会立即发送到服务器。但是,当我按住箭头时,我立即只获得一条关键信息(最初点击一条),200毫秒后我就开始获得密钥流。我的目标是始终在那时按下按键流。
我故意避免使用(e.key.repeat == 0),因为我需要将每次按键发送到服务器以正确更新服务器的字符逻辑对象位置。