SDL僵硬运动

时间:2015-10-13 21:15:21

标签: c++ sdl

我正在做一个乒乓球游戏,lPad是左边的垫子而rPad是正确的垫子,但是我有一个问题,当任何垫子向上移动时,当我释放向上按钮并按下垫子停止一段时间然后下降,另一件事是,当按下这两个控件(只有一个正在移动)时,我无法移动两个打击垫:

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

                    case SDLK_s:
                        lPad.y += 8;
                        if(lPad.y >= s.SCREEN_HEIGHT - lPad.getHeight()) {
                            lPad.y = s.SCREEN_HEIGHT - lPad.getHeight();
                        }
                        break;

                        case SDLK_w:
                        lPad.y -= 8;
                        if(lPad.y <= 0) {
                            lPad.y = 0;
                        }
                        break;

                        case SDLK_DOWN:
                        rPad.y += 8;
                        if(rPad.y >= s.SCREEN_HEIGHT - rPad.getHeight()) {
                            rPad.y = s.SCREEN_HEIGHT - rPad.getHeight();
                        }
                        break;

                        case SDLK_UP:
                        rPad.y -= 8;
                        if(rPad.y <= 0) {
                            rPad.y = 0;
                        }
                        break;

                        default:
                        break;
                    }
                }

任何想法如何解决这个问题并使其顺利进行?

1 个答案:

答案 0 :(得分:1)

最好使用SDL_GetKeyboardState(NULL)作为获取输入的函数。这样,您可以同时获得键盘的整个状态,从而允许并行输入。如果您使用while循环,则每个事件都会被单独捕获,因此会不稳定。

以下是一些如何使用它的示例代码:

  const auto * keys = SDL_GetKeyboardState(NULL);

  while(!done) {
    while(SDL_PollEvent(&e)) {
      if(e.type == SDL_QUIT) {
        done = true;
      }    
    }

    SDL_PumpEvents();

    if (keys[SDL_SCANCODE_UP]) {
      p1.set_speed(0, -60000 * delta.count());
    }
    if (keys[SDL_SCANCODE_DOWN]) {
      p1.set_speed(0, 60000 * delta.count());
    }
    if (keys[SDL_SCANCODE_LEFT]) {
      p1.set_speed(-60000 * delta.count(), 0);
    }
    if (keys[SDL_SCANCODE_RIGHT]) {
      p1.set_speed(60000 * delta.count(), 0);
    }

另外,我可以建议使用速度变量吗?使用像素不是缩放移动的好方法,因为它取决于屏幕的分辨率。使用基于时间步长的东西会更加健壮。