|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
DIRECTX TUTO 9 : DIRECTINPUT LA SOURIS ....
Information sur la source
Description
Pour ce 9eme tuto, je vous propose la gestion de la souris, sous directx, je ne repars bien sur pas du début, mais je ne donnerais ici que ce qui est nécessaire. J'ai mis comme toujours une source accompagnée de ses commentaires.
Source
- 'Dans ce 9e tutoriel, je pars sur la base que vous savez afficher une image par Direct Draw.
-
- ' Donc, partons dans le vif du sujet. Il vous faut donc avoir déclaré DirectX, DirectDraw, normalement. Ensuite vous rajoutez ces variables :
-
- Public dInput As DirectInput ' Déclaration de DirectInput pour relever sous DirectX les entrées.
- Public diMouse As DirectInputDevice ' Ici un device pour DirectInput
- Public SourisX As Long ' Les coordonnées de la souris en X
- Public SourisY As Long ' Les coordonnées de la souris en Y
-
- ' Declaration d'une surface pour l'image du curseur
- Public CurseurSouris As DirectDrawSurface7
- Dim ddsdCurseurSouris As DDSURFACEDESC2
- ' Couleur transparente
- Dim ck As DDCOLORKEY
-
- Ensuite il faut initialiser tout ce petit monde :
-
- Juste 5 petites lignes pour pouvoir utiliser la souris.
-
- Set dInput = dx.DirectInputCreate() ' Initialisation de DirectInput
- Set diMouse = dInput.CreateDevice("Guid_sysMouse") ' Création du device de type Mouse (souris)
- diMouse.SetCommonDataFormat DIFORMAT_MOUSE ' Format de la souris
- ' on définit un niveau de coopération tel qu'il soit ou exclusif ou en premier plan
- diMouse.SetCooperativeLevel Form1.hWnd, DISCL_EXCLUSIVE Or DISCL_FOREGROUND
- diMouse.Acquire ' Dernière chose on capture la souris
-
-
-
- Pour ce qui ne se rappelle pas, on définit notre image de curseur et notre colorkey (couleur transparente) comme ceci :
-
- ' ColorKey
- ck.low = RGB(255, 255, 255)
- ck.high = RGB(255, 255, 255)
-
- 'Image curseur
- Set CurseurSouris = dd.CreateSurfaceFromFile(App.Path & "\curseur.bmp", ddsdCurseurSouris)
- CurseurSouris.SetColorKey DDCKEY_SRCBLT, ck
-
- Nous allons utilisé une fonction Souris qui nous permettra d'affiché le curseur et de capturé les appuies sur les boutons :
-
- ' Déclaration de la fonction
- Public Function Souris()
-
- ' Ici on initialise la récupération du statut de la souris :
- ' Déclaration d'une variable pour récupérer le statut de la souris
- Dim MouseState As DIMOUSESTATE
- ' Récupération du statut de la souris dans notre variable
- diMouse.GetDeviceStateMouse MouseState
-
- ' Ensuite on définit des limites à ne pas dépasser pour pas que le curseur dépasse les bords de l'écran
- ' (SourisX + MouseState.x) >= 0) Si la position de la souris en x est supérieur ou égal à 0
- ' (SourisX + MouseState.x) < (640 - LargeurCurseur) Si la position de la souris est inférieur à la largeur de l'écran moins la largeur de notre curseur
- ' (SourisY + MouseState.y) >= 0) Si la position de la souris en y est supérieur ou égal à 0
- ' (SourisY + MouseState.y) < (480 - HauteurCurseur)) Si la position de la souris en y est inférieur à la hauteur de l'écran moins la hauteur de notre curseur
-
- ' Bloque conditionnel :
- If ((SourisX + MouseState.x) >= 0) And ((SourisX + MouseState.x) < (640 - 32)) And ((SourisY + MouseState.y) >= 0) And ((SourisY + MouseState.y) < (480 - 51)) Then
- ' Calcul de la position de la souris
- SourisX = SourisX + MouseState.x ' Ajout de la nouvelle position à l'ancienne, car au 'départ SourisX = 0 donc 0 + 10 vers la droite = 10 mais si on ne mettait pas l'addition sa
- 'Ferais 0 + 10 =10
- 'deuxième mouvement SourisX=10 mais sans l'addition SourisX passe à 0 donc boucle de non
- «-déplacement.
- SourisY = SourisY + MouseState.y ' Ajout de la nouvelle position à l'ancienne, car au
- 'départ SourisY = 0
- End If
-
-
- ' Appuis sur un des boutons de la souris, donc on utilise MouseState.buttons()
- ' si buttons(0) c'est bouton gauche, si buttons(1) = droite, si buttons(2) = centre
-
- If MouseState.buttons(0) <> 0 Then ' Si on appuis sur le bouton de gauche
- Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite ' On affiche le fond en blanc
- Backbuffer.DrawText 10, 10, "Gauche", False ' On affiche le texte : Gauche
- End If
- If MouseState.buttons(1) <> 0 Then ' Si on appuis sur le bouton du milieu
- Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite ' On affiche le fond en blanc
- Backbuffer.DrawText 10, 10, "Droite", False ' On affiche le texte : Droite
- End If
- If MouseState.buttons(2) <> 0 Then ' Si on appuis sur le bouton de droite
- Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite ' On affiche le fond en blanc
- Backbuffer.DrawText 10, 10, "Centre", False ' On affiche le texte : Centre
- End If
-
- ' On affiche dans le backbuffer l'image de la souris.
- Backbuffer.BltFast SourisX, SourisY, CurseurSouris, ddRect(0, 0, 0, 0), DDBLTFAST_SRCCOLORKEY
- End Function
-
- Voila avec ceci vous pouvais afficher un curseur et récupéré l'appui sur les boutons.
-
'Dans ce 9e tutoriel, je pars sur la base que vous savez afficher une image par Direct Draw.
' Donc, partons dans le vif du sujet. Il vous faut donc avoir déclaré DirectX, DirectDraw, normalement. Ensuite vous rajoutez ces variables :
Public dInput As DirectInput ' Déclaration de DirectInput pour relever sous DirectX les entrées.
Public diMouse As DirectInputDevice ' Ici un device pour DirectInput
Public SourisX As Long ' Les coordonnées de la souris en X
Public SourisY As Long ' Les coordonnées de la souris en Y
' Declaration d'une surface pour l'image du curseur
Public CurseurSouris As DirectDrawSurface7
Dim ddsdCurseurSouris As DDSURFACEDESC2
' Couleur transparente
Dim ck As DDCOLORKEY
Ensuite il faut initialiser tout ce petit monde :
Juste 5 petites lignes pour pouvoir utiliser la souris.
Set dInput = dx.DirectInputCreate() ' Initialisation de DirectInput
Set diMouse = dInput.CreateDevice("Guid_sysMouse") ' Création du device de type Mouse (souris)
diMouse.SetCommonDataFormat DIFORMAT_MOUSE ' Format de la souris
' on définit un niveau de coopération tel qu'il soit ou exclusif ou en premier plan
diMouse.SetCooperativeLevel Form1.hWnd, DISCL_EXCLUSIVE Or DISCL_FOREGROUND
diMouse.Acquire ' Dernière chose on capture la souris
Pour ce qui ne se rappelle pas, on définit notre image de curseur et notre colorkey (couleur transparente) comme ceci :
' ColorKey
ck.low = RGB(255, 255, 255)
ck.high = RGB(255, 255, 255)
'Image curseur
Set CurseurSouris = dd.CreateSurfaceFromFile(App.Path & "\curseur.bmp", ddsdCurseurSouris)
CurseurSouris.SetColorKey DDCKEY_SRCBLT, ck
Nous allons utilisé une fonction Souris qui nous permettra d'affiché le curseur et de capturé les appuies sur les boutons :
' Déclaration de la fonction
Public Function Souris()
' Ici on initialise la récupération du statut de la souris :
' Déclaration d'une variable pour récupérer le statut de la souris
Dim MouseState As DIMOUSESTATE
' Récupération du statut de la souris dans notre variable
diMouse.GetDeviceStateMouse MouseState
' Ensuite on définit des limites à ne pas dépasser pour pas que le curseur dépasse les bords de l'écran
' (SourisX + MouseState.x) >= 0) Si la position de la souris en x est supérieur ou égal à 0
' (SourisX + MouseState.x) < (640 - LargeurCurseur) Si la position de la souris est inférieur à la largeur de l'écran moins la largeur de notre curseur
' (SourisY + MouseState.y) >= 0) Si la position de la souris en y est supérieur ou égal à 0
' (SourisY + MouseState.y) < (480 - HauteurCurseur)) Si la position de la souris en y est inférieur à la hauteur de l'écran moins la hauteur de notre curseur
' Bloque conditionnel :
If ((SourisX + MouseState.x) >= 0) And ((SourisX + MouseState.x) < (640 - 32)) And ((SourisY + MouseState.y) >= 0) And ((SourisY + MouseState.y) < (480 - 51)) Then
' Calcul de la position de la souris
SourisX = SourisX + MouseState.x ' Ajout de la nouvelle position à l'ancienne, car au 'départ SourisX = 0 donc 0 + 10 vers la droite = 10 mais si on ne mettait pas l'addition sa
'Ferais 0 + 10 =10
'deuxième mouvement SourisX=10 mais sans l'addition SourisX passe à 0 donc boucle de non
«-déplacement.
SourisY = SourisY + MouseState.y ' Ajout de la nouvelle position à l'ancienne, car au
'départ SourisY = 0
End If
' Appuis sur un des boutons de la souris, donc on utilise MouseState.buttons()
' si buttons(0) c'est bouton gauche, si buttons(1) = droite, si buttons(2) = centre
If MouseState.buttons(0) <> 0 Then ' Si on appuis sur le bouton de gauche
Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite ' On affiche le fond en blanc
Backbuffer.DrawText 10, 10, "Gauche", False ' On affiche le texte : Gauche
End If
If MouseState.buttons(1) <> 0 Then ' Si on appuis sur le bouton du milieu
Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite ' On affiche le fond en blanc
Backbuffer.DrawText 10, 10, "Droite", False ' On affiche le texte : Droite
End If
If MouseState.buttons(2) <> 0 Then ' Si on appuis sur le bouton de droite
Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite ' On affiche le fond en blanc
Backbuffer.DrawText 10, 10, "Centre", False ' On affiche le texte : Centre
End If
' On affiche dans le backbuffer l'image de la souris.
Backbuffer.BltFast SourisX, SourisY, CurseurSouris, ddRect(0, 0, 0, 0), DDBLTFAST_SRCCOLORKEY
End Function
Voila avec ceci vous pouvais afficher un curseur et récupéré l'appui sur les boutons.
Conclusion
Si vous avez un problème d'initialisation de DirectDraw reportez-vous soit au tuto précédent que j'ai fait sur DirectDraw, soit à la source, mais attention dans la source seulement la partie DirectInput est commentée. Derrière chose, DirectInput sert aussi pour le Joystick et le clavier, j'ai déjà expliqué le clavier dans un des tuto précédent. Bon code, et n'oublier pas que je suis là pour toute remarque.
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 23 septembre 2004 19:32:50 :
- Une petite erreur dans le nom du projet, j'avai mis DirectInput se qui ne peux aller car le nom du projet et le nom d'une reference doivent être different.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Comparez les prix Nouvelle version

HTC Touch HD
Entre 25€ et 605€
|