Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2971 connectés 

 


Dernière réponse
Sujet : [c++bder] capture mouvement(pas position) souris
farib up
 
http://www.developpez.net/forums/viewtopic.php?t=29187
 
aussi

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
farib up
 
http://www.developpez.net/forums/viewtopic.php?t=29187
 
aussi
farib nan mon pb c'est que la souris elle est bloquée par l'écran (en plus de qu'elle sort de la fenetre) c'est pour cela quez j'ai essayé de faire avec un setcursorpos
HelloWorld En effet, une fenetre ne recoit les mouvements de la souris que si celle-ci lui passe dessus ...
Il faut donc qu'elle "capture" la souris (les autres fenetres ne recoivent alors plus aucun message de souris, meme si elle passe dessus).
Donc quand le joueur clique sur le bouton dans ta fenetre, tu capture la souris.
Une fois le bouton relache, tu libere la capture.
Pitounet Tu devrais regarder du coté de la fonction SetCapture().
Je crois que c'est ta solution.
farib pour mon tetris en opengl, j'implémente une fonction permettant de faire bouger la caméra au moyen de la souris
 
 
je souhaite avoir le comportement suivant poru ma souris  
 
*boutons pas appuyés => curseur normal, la souris sert a sélectionner les fenetres
 
*boutons gauche appuyé, le curseur disparait, et le mouvement de la souris fait bouger la caméra, a la manière d'un quake-like;
 
 
je procede comme suit

Code :
  1. //dans la déclaation de Form1
  2.         bool EtatCurseur ;
  3.         TPoint Previous ;
  4. void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
  5.       TShiftState Shift, int X, int Y)
  6. {
  7.        EtatCurseur = false ;
  8.        ShowCursor(false);
  9.         Previous.x = X;
  10.         Previous.y = Y ;
  11. }
  12. //---------------------------------------------------------------------------
  13. void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
  14.       TShiftState Shift, int X, int Y)
  15. {
  16.         EtatCurseur = true ;
  17.        ShowCursor(true);
  18. }
  19. //---------------------------------------------------------------------------
  20. void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
  21.       int X, int Y)
  22. {
  23. if (!EtatCurseur)
  24. {
  25.         Tetris->BougerCamera(rDroit,X-Previous.x);
  26.         Tetris->BougerCamera(rHaut,Y-Previous.y);
  27.        Previous.x=X ; Previous.y=Y;
  28. }
  29. }
  30. //---------------------------------------------------------------------------


 
ca marche , masi le prob c'est que la souris reste "bloquée au bord de l'écran", je peux pas fiare bouger ma souris tres largement, comme dans un doomlike ouje doi même soulever physiquement ma souris pour lui faire faire de plus amples mouvement
 
d'ailleurs, quand je relache le bouton, le curseur est au bord de l'écran c'était odnc bien celui ci qui bloquait ma souris
 
 
j'ai donc fait
 

Code :
  1. void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
  2.       int X, int Y)
  3. {
  4. if (!EtatCurseur)
  5. {
  6.         Tetris->BougerCamera(rDroit,X-Previous.x);
  7.         Tetris->BougerCamera(rHaut,Y-Previous.y);
  8.       TPoint Bidule(Previous.x,Previous.y);
  9.         Bidule = ClientToScreen(Bidule);
  10.        SetCursorPos(Bidule.x,Bidule.y);
  11. }
  12. }


 
pour que le curseur reste au centre, mais ca marche pas, c'est foireux, et ca me fais même louper le timer ! :D
 
bref, si vous avez des idées pour faire se comporter ma souris comme une souris de quaker, je suis preneur  
 
ps : evitter directinput :D
 
mélanger direct x et opengl a la sauce c++ builder c tordu ;)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)