2011-08-08 7 views
0

이전에 XNA에서 몇 가지 게임을 만들었으며 새 프로젝트를 시작하려고합니다. 내가하고 싶은 한 가지는 마우스 움직임입니다.XNA 마우스 이동

(비슷한 결과가 혼동으로 이어지는 것을 보았을 때) 마우스의 움직임을 얻고 싶습니다. 커서 위치 또는 한 프레임에서 다음 프레임으로의 위치 변경이 아닙니다. 나는 단순히 마우스가 어떻게 움직 였는지에 관한 데이터를 원할 것이다.

이전 게임에서는 (숨겨진) 커서를 뷰포트 중간으로 재설정하고 위치 변경을 살펴 봤습니다. 그러나 이것은 약간의 속임수에 불과하고 내 코드에서 좀 지저분한 계산을 유도합니다.

마우스 움직임을 프로그램으로 반환하는 방법이 있습니까?

감사합니다, 매트

편집 : 최초의 코멘트에 대한 응답으로

. 이 경우에 참조하고있는 커서의 위치는 마우스 포인터의 화면상의 위치입니다. 제가 언급하고있는 마우스의 움직임은 물리적으로 마우스를 움직이는 것입니다.

XNA는 마우스라는 단어가 포인터 (또는 커서)와 동의어 인 것처럼 보입니다.

내가 겪고있는 문제는 마우스가 왼쪽으로 움직이더라도 커서가 화면의 가장자리에 있으므로 프로그램에서 해당 움직임을 얻을 수 없다는 것입니다.

+0

위치 이동과 변화의 차이는 무엇입니까? 귀하의 질문을 명확히하십시오! "몸짓"을 의미합니까? –

+0

글쎄, inbuilt 메소드가 없다면, 모든 계산을 수행하는 작은 mouseMoveHandler 클래스를 생성하면된다. – Frosty840

답변

3

MouseState 클래스에는 마우스 커서의 위치 만 포함됩니다. 이 위치는 앞에서 언급했듯이 화면 가장자리로 잘립니다. 사용자가 MouseState 클래스 이외의 마우스를 움직 였는지 여부를 판단 할 방법이 없습니다. 특히 마우스가 움직이는 방향을 나타내는 MouseDirection, MouseTangent 또는 MouseAngle 속성이 없습니다.

해결 방법으로 SetPosition으로 전화를 걸어 커서를 화면 가운데에 놓으면 마우스가 움직이는 방향을 항상 알 수 있습니다. 사실, setPosition를도이 방법을 권장합니다

, 이러한 일인칭 게임으로 상대 입력을 가지고 당신의 게임 창 각 프레임의 중앙에 마우스의 위치를 ​​설정하려면이 방법을 사용하여 . 이렇게하면 양축에서 가장 큰 입도로 마우스 움직임을 읽을 수 있습니다.

+0

고마워, 그게 내가 계획했던 방법이야. 나는 그것을하기위한 더 단순하거나 더 좋은 방법이 있는지 확인하려고합니다. – Matt

0

게임 개발이 내 주요 개발 라인이 아니므로, XNA에 대한 나의 이해는 매우 제한적입니다.

내가 말한대로, XNA의 bejavior에 대해 이해하려면 실제로 마우스가 얼마나 움직 였는지 확인하기 위해 프레임 간의 위치 변화를 계산해야합니다.

X-Y 좌표가 다양하므로이 간단한 측정을 기반으로 모든 종류의 데이터를 얻을 수 있습니다.

+1

예, 커서가 화면의 왼쪽이나 오른쪽을 칠 때 당신이 설명하는 방법으로 x 좌표를 변경할 수 없습니다. 커서가 화면의 상단 또는 하단에 도달하면 y 좌표에서도 마찬가지입니다. – Matt

-2

마우스의 실제 움직임을 원할 경우 주어진 이벤트에 재설정되는 마우스의 배열 또는 목록을 만들 수 있습니다 (예 : 이전 이벤트). elapsedtime > 1f 또는 IsMouseReleased. 가이 같은 보일 것이다 :

List<Vector2> Movement = new List<Vector2>();  

public override void Update(GameTime gameTime) 
{ 
    MouseState pms; 
    MouseState ms = Mouse.GetState(); 

    pms = ms; 

    Movement.Add(pms.X - ms.X, pms.Y - ms.Y); 

    if(ms.LeftButton == ButtonState.Released){ Movement.Clear(); } 

    base.Update(gameTime); 
}