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 :
- //dans la déclaation de Form1
- bool EtatCurseur ;
- TPoint Previous ;
- void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
- TShiftState Shift, int X, int Y)
- {
- EtatCurseur = false ;
- ShowCursor(false);
- Previous.x = X;
- Previous.y = Y ;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
- TShiftState Shift, int X, int Y)
- {
- EtatCurseur = true ;
- ShowCursor(true);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
- int X, int Y)
- {
- if (!EtatCurseur)
- {
- Tetris->BougerCamera(rDroit,X-Previous.x);
- Tetris->BougerCamera(rHaut,Y-Previous.y);
- Previous.x=X ; Previous.y=Y;
- }
- }
- //---------------------------------------------------------------------------
|
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 :
- void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
- int X, int Y)
- {
- if (!EtatCurseur)
- {
- Tetris->BougerCamera(rDroit,X-Previous.x);
- Tetris->BougerCamera(rHaut,Y-Previous.y);
- TPoint Bidule(Previous.x,Previous.y);
- Bidule = ClientToScreen(Bidule);
- SetCursorPos(Bidule.x,Bidule.y);
- }
- }
|
pour que le curseur reste au centre, mais ca marche pas, c'est foireux, et ca me fais même louper le timer !
bref, si vous avez des idées pour faire se comporter ma souris comme une souris de quaker, je suis preneur ps : evitter directinput
mélanger direct x et opengl a la sauce c++ builder c tordu  Message édité par farib le 27-08-2002 à 22:38:49
|