2013-06-22 1 views
0

스티어링 휠 게임 컨트롤러가 있습니다. 이제 NFS-17과 같은 경주 용 게임용 드라이버를 작성하려고합니다. 게임에서 Xinput을 사용하고 있음을 알고 있습니다. 내 질문 : 1) 스티어링 휠을 돌렸을 때 게임에 메시지를 보내는 방법. 2) SendMessage()를 사용하고 있습니까? 3) SendMessage()를 사용하는 경우 게임 창 핸들을 가져 오는 방법과 wParam 및 lParam을 보내야합니다.경기 용 게임 컨트롤러에 메시지 보내기 Xinput

답변

0

X 입력은 xbox360 컨트롤러 용입니다. 핸들 X 축의 경우 게임 패드의 두 트리거를 사용할 수 있습니다. XInput은 getter/setter입니다. P 연결되어있는 컨트롤러의 상태를 알려주고 요청에 연결되거나 연결되지 않은 경우보고합니다. 아무 것도 모니터링하거나 저장할 수 없으며 메시지를 보내지도 않습니다. 입력 포커스가 있습니다. 메시지를 보내려면 빌드 할 수있는 앱을 사용해야합니다. 자, 실제로 필요한 것까지. 컨트롤러의 상태를 검사 할 간단한 C++ 응용 프로그램을 작성할 수는 있지만 잠깐 기다려주십시오. xbox360 컨트롤러가 없습니다. 먼저 응용 프로그램이 oem 드라이버를 사용하여 핸들에 어떻게 반응하는지 테스트합니다. USB 포트 (MSDN의 GetInputState())에 연결되어있는 것과 같이 읽을 수 없다면 Windows 일반 드라이버를 사용해보십시오 (어떤 제품이라도 설치하도록하십시오. 심지어는 xbox360으로 스티어링 휠을 인식 할 수도 있습니다. 한 점과 비슷하지만 차이점은 더 비싼 바퀴가 달린 축과 버튼의 수임). 그러면 컨트롤러 (스티어링 휠)의 상태를 실제로 읽었을 때 GetHDC (윈도우 핸들)를 사용하십시오. 여기서 FindWindow (윈도우 이름/제목)를 통해 윈도우 핸들을 검색합니다. alt-tab을 사용하여 게임의 창에 사용 된 제목이 무엇이든 mouseover로 확인하십시오. 창 핸들과 장치 컨텍스트를 소유하고있을 때 장치 핸들을 통해 WndProc 함수를 통해 콜백 (call back) WndProc 함수에 메시지를 보내고 장치 컨텍스트를 통해 텍스트/그리기 이미지/모양을 표시 할 수도 있습니다. 메시지는 사용 가능한 휠이없는 경우 해당 가상 키 코드 (예 : UP 화살표의 경우 VK_UP ... 찾아보기)가 있어야 키보드에서 누를 수 있습니다. 트릭은 바퀴 회전의 모든 각도에 대해 PWM을 시뮬레이트하는 것입니다. 스티어링 잠금 장치가 제거되고 KEY_UP 메시지와 그에 상응하는 KEY_UP 메시지가 나올 때까지 KEY_DOWN 메시지를 하나씩 보내면 스티어링 잠금 장치는 왼쪽으로 높은 바퀴 회전을위한 VK_LEFT 키 코드의 푸시/교대 주파수. 휠의 각도가 낮 으면 키 누르기/해제 메시지 사이에 더 큰 멈춤이 생깁니다. 운전사를 만드는 보너스는 자신이 원하는대로 감도, 버튼 상관 관계, 데드 존을 조정할 수 있다는 것입니다.

다른 한편으로는 이미 이것과 같은 시뮬레이터가 있습니다. 그리고 다시 당신은 USB + 통신 프로토콜을 사용하여 6 + 1 transmision으로 당신 만의 스티어링 휠을 만들 수 있습니다.), 마이크로 컨트롤러 (PIC, atmega, nxp 등등. 무엇보다 저렴하고 하드웨어 USB를 준비하거나 USB 컨트롤러에 추가), X, Y 등 축에 대한 가변 저항과 구동 시스템을위한 일부 부품. 행운과 유튜브에 게시 : P!

P. 지옥 지금은 너무 늦었 어,하지만 이봐 ... 나는 내가 한 번도 해보지 못한 맘보 - 잼보를 써야한다고 느꼈지만, 그렇게하면 게으르지 않았다. :)

업데이트 : xInput은 호환성이있을 때 (아마도 하이 엔드 휠 및 기쁨) 작동하지만 directx는 핸들 휠도 알고 있습니다. 나에게 그것은 유일한 해결책이었다. 마이크로 소프트는 XINput이 오디오와 호환 가능한 제품을 제공하기 때문에 XInput과 directX 모두 사용해야한다고 말한다. algorythm은 건전하지만 많은 구현에 개방적입니다. 전용 도구가 내 버전을 지원하지 않았기 때문에 GTA SA에 대해이 기능을 성공적으로 구현했습니다. 이제 나는 Acc와 Brake를 페달에서 마침내 얻었습니다. 나는 자신의 선택 (경험적인 것)의 특정 주파수를 달성하기 위해 타이머를 사용했고, 0 근처에서부터 전체 기간까지의 펄스 폭을 조절했습니다 (페달의 가벼운 터치 및 지속적으로 페달을 금속에 적용).모든 펄스에서 나는 두 개의 메시지를 보냈다 : 펄스의 시작에서 W/S 키를 누르고, 계산 된 펄스 폭이 최종 값에 도달했을 때 W/S 키를 위로 움직였다. Pulse Width의 공식은 페널이 최대 주행 거리에서 이동 한 경우 (예 : DirectInput이 [-1000,1000]의 정수를보고합니다.) [-fullbrake , fullacceleration]).

관련 문제