Bonjour,
j'ai quelques difficultées avec l'api directinput. J'ai tenté de modifier l'exemple généré en visual C par le wizard direct 3D pour qu'il affiche une boite de dialogue quand on tape sur F4. Mais quand je tape sur F4 ce n'est pas une boite de dialogue, mais une infinitée (ou presque) qui s'ouvre.
Je m'y suis pris ainsi :
1) j'ai rajouté INPUT_TEST_MATH dans les énumérations d'entrées possibles
2) j'ai mappé cette action à la touche F4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 enum INPUT_SEMANTICS { (...) INPUT_PLAY_SOUND, INPUT_TEST_MATH, };
DIACTION g_rgGameAction[] =
{
(...)
{ INPUT_TEST_MATH, DIKEYBOARD_F4, 0, TEXT("Mathematical tests"), },
};
3) j'ai rajouté dans la structure UserInput une entrée :
4) j'ai rajouté dans la fonction "void CMyD3DApplication::UpdateInput( UserInput* pUserInput ) " une ligne pour prendre en compte INPUT_TEST_MATH. J'ai racourci le code que je vous montre pour que ce soit plus lisible. Vous pouvez y voir que j'ai mis un case pour que quand INPUT_TEST_MATH soit lu en entrée je mette bDoTestMath à TRUE. Avant chaque processing je le remet aussi à FALSE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct UserInput { (...) BOOL bDoTestMath; // RAJOUTE };
5) finalement tout à la fin de la fonction FrameMove() j'ai rajouté le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 void CMyD3DApplication::UpdateInput( UserInput* pUserInput ) { if( NULL == m_pInputDeviceManager ) return; // Get access to the list of semantically-mapped input devices CInputDeviceManager::DeviceInfo* pDeviceInfos; DWORD dwNumDevices; m_pInputDeviceManager->GetDevices( &pDeviceInfos, &dwNumDevices ); // Loop through all devices and check game input for( DWORD i=0; i<dwNumDevices; i++ ) { DIDEVICEOBJECTDATA rgdod[10]; (...) pUserInput->bDoTestMath=FALSE; // Get the sematics codes for the game menu for( DWORD j=0; j<dwItems; j++ ) { (...) switch( rgdod[j].uAppData ) { // TODO: Handle semantics for the game // Handle relative axis data case INPUT_ROTATE_AXIS_LR: (...) (...) case INPUT_TEST_MATH: if( bButtonState ) pUserInput->bDoTestMath = TRUE; break; } } } (...) }
quelqu'un à une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if (m_UserInput.bDoTestMath) { HWND hDlg; hDlg=CreateDialog(g_hInst,(LPCTSTR)IDD_DIALOG1,NULL,NULL); ShowWindow(hDlg,SW_SHOW); }
Partager