【问题标题】:SDL stiff movementSDL 僵硬运动
【发布时间】:2015-10-14 05:35:43
【问题描述】:

我正在做一个乒乓球游戏,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;
                    }
                }

知道如何解决这个问题并使其顺利吗?

【问题讨论】:

  • @zenith 你是什么意思?
  • 认为他的意思是更多的选项卡和你的代码——实际上是你所有的问题——将毫不费力地从屏幕的右侧飘出......

标签: c++ sdl


【解决方案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);
    }

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

【讨论】:

  • 你能告诉我 set_speed() 应该如何工作吗?什么是增量?
猜你喜欢
  • 2014-04-10
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多