2010-05-05 4 views
2

일종의 충돌 과정 프로젝트에서 SDL과 OpenGL의 조합을 사용하여 어떻게 작동하는지 직접 가르칩니다. 저는 2D 게임에서 가속을 사용하는 방법으로 OpenGL에 관심이 있습니다. 그래서 2D 비행기에서 작업 할 때이 게임이 필요합니다.마우스를 가리 키도록 내 객체를 가져올 수 없습니다.

현재 문제는 많이 겪고 있습니다. 마우스 버튼을 클릭 한 상태에서 마우스를 가리키고 마우스를 들어 올리면 그 방향을 가리키는 것이 좋습니다.

void Square::handle_input() { 
    //If a key was pressed 
    if(event.type == SDL_KEYDOWN) { 
     //Adjust the velocity 
     switch(event.key.keysym.sym) { 
      case SDLK_UP: upUp = false; yVel = -1; break; 
      case SDLK_DOWN: downUp = false; yVel = 1; break; 
      case SDLK_LEFT: leftUp = false; xVel = -1; break; 
      case SDLK_RIGHT: rightUp = false; xVel = 1; break; 
      case SDLK_w: wUp = false; sAng = 1; break; 
      case SDLK_s: sUp = false; sAng = -1; break; 
     } 
    } 
    //If a key was released 
    else if(event.type == SDL_KEYUP) { 
     //Adjust the velocity 
     switch(event.key.keysym.sym) { 
      case SDLK_UP: upUp = true; yVel = 0; break; 
      case SDLK_DOWN: downUp = true; yVel = 0; break; 
      case SDLK_LEFT: leftUp = true; xVel = 0; break; 
      case SDLK_RIGHT: rightUp = true; xVel = 0; break; 
      case SDLK_w: wUp = true; sAng = 0; break; 
      case SDLK_s: sUp = true; sAng = 0; break; 
     } 
    } 
    //If a mouse button was pressed 
    if(event.type == SDL_MOUSEBUTTONDOWN) { 
     switch (event.type) { 
      case SDL_MOUSEBUTTONDOWN: mouseUp = false; mousex == event.button.x; mousey == event.button.y; break; 
      case SDL_MOUSEBUTTONUP: mouseUp = true; break; 
     } 
    } 
} 

그리고이 또한 지금 x와 y 번역을

if (!mouseUp) { 
xVect = mousex - x; 
yVect = mousey - y; 

radAng = atan2 (mousey - y, mousex - x); 
sAng = radAng * 180/3.1415926l; 
} 

을 처리하는 내 객체 : 이동 전화의 끝에서 호출 될 때 나는 물체가 회전하고 아래로 아래로 향하게 클릭 왼쪽으로 돌아 왔지만 더 이상 방향을 변경하지 않습니다. 내가 여기 올 수있는 도움이 정말 감사 할께. 여기에 주 (state) 대 폴링 (polled) 이벤트와 관련하여 문제가있을 수 있다고 생각합니다. 그러나 제가 경험 한 모든 자습서에서 저는 그것을 고쳐야한다고 확신했습니다. 방금 벽에 부딪 쳤고 조언이 필요합니다!

답변

3

마우스 단추를 누르고있는 동안 개체가 마우스의 위치를 ​​계속 가리키고 있다고 가정합니다. 이 문제를 해결하려면 마우스를 움직일 때마다 마우스 위치를 업데이트해야합니다.

이와 비슷한 코드를 추가 : 나는 여기에 SDL 참조가 없어

if(event.type == SDL_MOUSEMOVE) { 
    // update the mouse position here using event.???.x/y 
    } 

주, 그래서 나는 당신에게 정확한 멤버를 줄 수는 없지만, 그 도움이 될 것입니다.

NB : 버튼 처리 코드에 문제가있을 것이라고 추측합니다. 하나의 값인 event.type을 확인하는 if 문이 있지만 그 본문 안에는 두 개의 값을 가진 switch 문이 있습니다. 이 값 중 하나만 실행됩니다. 버튼 다운/버튼 업 이벤트에 대해 두 개의 개별 if 문을 사용하는 것이 좋습니다.

+0

예! 고마워요. 작동하도록했습니다.하지만 웬일인지 그것이 90도 벗어 났지만 지금은 작동합니다! 그것은 단지 수학 문제 일 뿐이므로 제가 생각했던 것보다 다른 축을 측정하여 처리 할 수 ​​있습니다. 그것은 당신이 말한 것처럼 별도의 사건을 필요로하는 문제였습니다. 나는 단지 피곤한 것 같아요. if (event.type == SDL_MOUSEMOTION &&! mouseUp) {}를 추가하면 문제가 해결되고 버튼을 누를 때만 마우스가 추적됩니다. 완벽한, 정말 고마워! – Melignus

+0

아무것도하지 않는 if 문을 추가하면 문제가 해결 될 것이라는 것은 이해가되지 않습니다. 문제가 해결되면 마우스가 움직일 때마다 mousex와 mousey가 최신 상태로 유지됩니다. – Kylotan

+0

@Kylotan - @melignus는 if 문의 본문을 생략하여 주석의 공간을 절약합니다. –

관련 문제