Accueil > > > DIRECTX TUTO 9 : DIRECTINPUT LA SOURIS ....
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.
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
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|