2008-10-28 5 views
1

가능한 한 최선을 다해 설명하겠습니다.상태 시스템에 입력 전달 (C#)

각 응용 프로그램에서 tick 키보드 및 마우스의 현재 상태를 쿼리하고 개별 클래스 및 데이터 구조로 래핑합니다. 키보드의 경우에는 Keys enum (현재 눌려진 각 키에 대해 하나의 항목)의 배열이고, 마우스의 경우 눌려진 각 버튼에 대한 좌표 델타와 bool을 포함하는 클래스입니다.

또한 스택을 유지 관리하고 상태를 마샬링하는 상태 관리자 클래스를 통해 관리되는 초보적인 상태 시스템이 있습니다.

내가 알고 싶은 것은 입력 (스냅 샷)을 내 앱이 한 번에 가질 수있는 개별 상태로 전달하는 가장 좋은 방법입니다.

가능한 한 많은 입력을 개별 상태에서 처리하여 상태 내에서 반복되는 논리를 줄이려고합니다.

또는 입력 스 냅샷을 가능한 한 순수하게 유지하고 상태에 전달하여 입력 특정 논리를 숨길 수 있도록 유지하는 것이 더 낫습니까?


이 구조는 내가 게임을 일하는 것이 상상 방법 비슷한이며,이 응용 프로그램이 게임은 아니지만 가능한 한 빨리 처리 할 필요가 없습니다.

답변

2

왜 각 틱이 키보드와 마우스의 상태를 쿼리하고 있습니까? 훨씬 더 좋고 전통적인 솔루션은 키보드와 마우스에서 발생한 이벤트를 캡처하는 것입니다. 그런 식으로 상태를 업데이트 할 필요가있을 때만 수행하면됩니다.

+0

저는 현재이 라인을 따라 작업 중이므로 계속 게시하게 될 것입니다. –

+0

필자는 이벤트에서만 호출되는 입력 클래스에 대리자가 전달된다는 사실에 만족했습니다. 건배! –

1

XNA에서 키보드 클래스를 정적으로 설정하여이 작업을 수행합니다.

KeyboardState state = Keyboard.GetState(); 

위의 코드 줄을 사용하여 현재 키 상태에 액세스 할 수 있습니다.

0

이벤트를 발생시키고 인수를 캡처해야합니다. 이것은 이것을 처리하는 가장 쉽고 효율적인 방법입니다.

class YourClass 
{  
    //data members ... 

    public void OnKeyboardPress(object sender, EventArgs args) 
    { 
     //handle your logic capturing the state here 
    } 
} 

//elsewhere 
someControl.KeyPress += new KeyPressDelegate(yourClassInstance.OnKeyboardPress); 
2

틱마다 키보드와 마우스를 쿼리하면 문제가 발생할 수 있습니다. 모든 틱을 쿼리하면 한 번 틱의 시간 영역에서 빠르게 발생하는 입력을 놓친다는 것을 알 수 있습니다. 사용자가 두 번의 틱 사이에서 키/버튼을 눌렀다가 놓는 상황을 상상해보십시오 (생각보다 많은 일이 발생합니다). 입력을 완전히 놓치게됩니다.

특히 C#에서는 이 완전하게이며 이와 같은 입력 이벤트에 맞춰야합니다. 이벤트를 사용해야합니다.