[c++bder] capture mouvement(pas position) souris

capture mouvement(pas position) souris [c++bder] - Programmation

Marsh Posté le 27-08-2002 à 22:36:04    

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 ;)


Message édité par farib le 27-08-2002 à 22:38:49
Reply

Marsh Posté le 27-08-2002 à 22:36:04   

Reply

Marsh Posté le 28-08-2002 à 01:42:45    

Tu devrais regarder du coté de la fonction SetCapture().
Je crois que c'est ta solution.

Reply

Marsh Posté le 28-08-2002 à 05:09:42    

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-08-2002 à 10:41:24    

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

Reply

Marsh Posté le 28-08-2002 à 21:32:24    

up
 
http://www.developpez.net/forums/viewtopic.php?t=29187
 
aussi


Message édité par farib le 28-08-2002 à 21:52:04
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed