문제

내 시나리오를 최대한 설명하려고 노력할 것입니다.

각 응용 프로그램에서 진드기 키보드와 마우스의 현재 상태를 쿼리하고 개별 클래스 및 데이터 구조로 랩합니다. 키보드의 경우 내 배열입니다 열쇠 ENUM (현재 누르는 각 키에 대한 하나의 항목)과 마우스의 경우 각 버튼에 대한 좌표 델타 및 부울이 포함 된 클래스입니다.

또한 주 관리자 클래스를 통해 관리되는 기초 상태 기계가 있습니다.

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

상태 내에서 반복되는 논리를 줄이기 위해 개별 상태에서 가능한 한 많은 입력을 처리하고 싶습니다.

아니면 입력 스냅 샷을 가능한 한 순수하게 유지하고 상태로 전달하여 입력-특이 적-로그가 숨겨져 있도록하는 것이 더 나을까요?

메모
이 구조는 게임이 작동한다고 상상하는 방식에 유사하며,이 응용 프로그램은 게임이 아니지만 가능한 빨리 처리해야합니다.

도움이 되었습니까?

해결책

각 진드기에 키보드와 마우스의 상태를 쿼리하는 이유는 무엇입니까? 훨씬 더 좋고 전통적인 솔루션은 키보드와 마우스에서 발사 된 이벤트를 캡처하는 것입니다. 그렇게하면해야 할 때만 상태를 업데이트하면됩니다.

다른 팁

간단히 키보드를 쿼리하고마다 마우스마다 마우스를 틱하면 문제가 발생할 수 있습니다. 모든 진드기를 쿼리하면 단일 진드기의 시간 영역 내에서 빠르게 발생하는 입력을 놓칠 수 있습니다. 사용자가 두 진드기 사이에 키/버튼을 눌러 릴리스하는 상황을 상상해보십시오 (생각보다 더 많이 발생합니다). 입력을 완전히 놓칠 것입니다.

특히 C#에서 완전히 이와 같은 입력 이벤트를 위해 이벤트를 사용해야합니다.

XNA에서는 키보드 클래스를 정적으로 만들어이를 수행합니다.

KeyboardState state = Keyboard.GetState();

그런 다음 위의 코드 라인으로 현재 키 상태에 액세스 할 수 있습니다.

이벤트를 해고하고 논쟁을 포착해야합니다. 그것은 이것을 처리하는 가장 쉽고 효율적인 방법 일 것입니다.

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top