2012-05-08 8 views
0

現在、SDLでゲームをしていますが、SDLがいくつかのイベントを受け取っていないという問題が発生しました。例として、私は前進するために「w」を押していると同時に、周りを見回すためにマウスを動かしています。しかし、「a」または「d」を押すと、SDLはこれらのイベントを選択しません。また、「w」をリリースしても、SDLはKEYUPイベントを取得しません。私は最初にこのコードをWindowsに書きましたが、うまくいきましたが、ubuntuに切り替えた後、もううまく動作しません。ここで私はイベントをポーリング私のメインループです:SDL_PollEventがすべてのイベントを受け取っていない

while(Running) 
{ 
    while(SDL_PollEvent(&event)) 
     Events(&event); 
    if(active){ 
     Loop(); 
     Render(); 
    } 
} 

これは、イベント内のコード()である:

switch(Event->type) 
    { 
     case SDL_QUIT: 
      Running = false; 
      break; 
     case SDL_KEYDOWN: 
      switch(Event->key.keysym.sym) 
      { 
       case SDLK_ESCAPE: 
        Running = false; 
        break; 
       case SDLK_a: 
        keyStates['a'] = true; 
        break; 
       case SDLK_s: 
        keyStates['s'] = true; 
        break; 
       case SDLK_d: 
        keyStates['d'] = true; 
        break; 
       case SDLK_w: 
        keyStates['w'] = true; 
        break; 
       case SDLK_LSHIFT: 
        camera.setSpeed(2.0f); 
        break; 
      } 
      break; 
     case SDL_KEYUP: 
      switch(Event->key.keysym.sym) 
      { 
       case SDLK_a: 
        keyStates['a'] = false; 
        break; 
       case SDLK_s: 
        keyStates['s'] = false; 
        break; 
       case SDLK_d: 
        keyStates['d'] = false; 
        break; 
       case SDLK_w: 
        keyStates['w'] = false; 
        break; 
       case SDLK_LSHIFT: 
        camera.setSpeed(1.0f); 
        break; 
      } 
      break; 
     case SDL_MOUSEBUTTONDOWN: 
      switch(Event->button.button) 
      { 
       case SDL_BUTTON_MIDDLE: 
        mouse.middle = true; 
        break; 
      } 
      break; 
     case SDL_MOUSEBUTTONUP: 
      switch(Event->button.button) 
      { 
       case SDL_BUTTON_MIDDLE: 
        mouse.middle = false; 
        break; 
      } 
      break; 
     case SDL_MOUSEMOTION: 
      if(moving){ 
       camera.lookat(float(Event->motion.x - winWidth/2),float(Event->motion.y - winHeight/2), MOUSE_SENSITIVITY, dt); 
       SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE); 
       SDL_WarpMouse(winWidth/2, winHeight/2); 
       SDL_EventState(SDL_MOUSEMOTION, SDL_ENABLE); 
      } 
      break; 
    } 

答えて

1

keyStates [ 'A'] = TRUE;

これにはSDL_GetKeyStateがあります。アレイを手動で保守する代わりに使用してください。

Uint8 keys[SDLK_LAST]; 
Uint8* sdlKeys = SDL_GetKeyState(0); 
memcpy(keys, sdlKeys, sizeof(keys)); 

bool keyPressed(SDLKey key){ 
    return keys[key] == SDL_PRESSED; 
} 

documentationもチェックしてください。

+0

-1:フロントページへのリンクは、実際に不必要な情報なしで問題への回答にOPを導くつもりはありません。確かにそれは読ませて、最終的に答えに来るが、問題を解決するのに役立たないたくさんの補足がある。 – user2738698

+0

@ user2738698:Dude。質問と回答の日付を確認してください。 – SigTerm

+0

だから?将来の人々にも役立つものではありません。答えの大半は問題ありません。フロントページへのリンクは、問題を解決しようとする人には役立ちません。 – user2738698

関連する問題