IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Problème de centrage de la souris dans un formulaire.


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [C#] Problème de centrage de la souris dans un formulaire.
    Bonjour,

    Voila, je developpe actuellement un moteur de rendu 3D temps réel, je suis en ce moment sur la gestion de la camera et j'ai un soucis qui me dépasse.

    J'explique ...

    Ma camera est déplacée à la maniere de certains jeux, c'est à dire à la premiere personne (FPS). Je travaille donc en calculant la direction du vecteur de déplacement de la souris en fonction du centre de la fenêtre.

    En plein écran ca fonctionne à merveille. Par contre, des lors qu'on passe en fenêtré, là ca se ne fonctionne plus vraiment comme esperé, la souris est position un tout petit peu à côté du centre et donc la camera tourne lentement.

    Ce comportement est différent selon les différents themes appliqués sur Windows XP.

    Enfin voila je bloque et je vois pas comment me sortir de ce probleme.

    Afin de vous aider un peu voici la structure hiérarchique de mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    +-Form-----------------------------+
    |+-View---------------------------+|
    ||                                ||
    ||                                ||
    ||               |                ||
    ||              -+-               ||
    ||               |                ||
    ||                                ||
    ||                                ||
    ||                                ||
    |+-Status Bar---------------------+|
    ||                                ||
    +----------------------------------+
    (Ca c'est du schéma )

    Et le code de ma methode. Mon probleme semble résider entre la ligne 18 et 21.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    01	private void SetMouseLook()
    02	{
    03		//Mouse Look
    04		if(camera.MouseLook)
    05		{
    06			//Cursor.Hide();
    07			point mousePos;
    08			int middleX = vApplication.Form.Width >> 1;
    09			int middleY = vApplication.Form.Height >> 1;
    10			float angleY = 0.0f;
    11			float angleZ = 0.0f;
    12			
    13			// Get Mouse Current Position
    14			mousePos.x = Mouse.iX;
    15			mousePos.y = Mouse.iY;
    16			
    17			// Reset the Mouse Position
    18			if(vApplication.isFullscreen)
    19				Cursor.Position = new Point(vApplication.Form.Left + middleX ,vApplication.Form.Top + middleY);
    20			else
    21				Cursor.Position = new Point(vApplication.Form.Left + middleX +4 ,vApplication.Form.Top + middleY + 25);
    22				
    23			// Get Mouse Direction
    24			angleY = (float)((middleX - mousePos.x)) / 1000.0f;
    25			angleZ = (float)((middleY - mousePos.y)) / 1000.0f;
    26			
    27			lastRotX = currentRotX;
    28			currentRotX += angleZ;
    29			
    30			if(currentRotX > 1.0f)
    31			{
    32				currentRotX = 1.0f;
    33				if(lastRotX != 1.0f)
    34				{
    35					vVector vAxis = camera.view - camera.position;
    36					vAxis.Cross(camera.up);
    37					vAxis.Normalize();
    38					camera.Rotate(-1.0f,vAxis.X,(Mouse.isInverted ? vAxis.Y : -vAxis.Y),vAxis .Z);
    39				}
    40			}
    41			else
    42			{
    43				vVector vAxis = camera.view - camera.position;
    44				vAxis.Cross(camera.up);
    45				vAxis.Normalize();
    46				camera.Rotate(angleZ,vAxis.X,(Mouse.isInverted ? vAxis.Y : -vAxis.Y),vAxis .Z);
    47			}
    48			camera.Rotate(angleY,0,1,0);						
    49		}
    50	}
    Merci d'avance pour votre aide,

    aegypius.
    IDE : #Developp 1.0 RC3
    .Net Framework : 1.1

  2. #2
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Salut et bienvenue

    Jette un coup d'oeuil sur les methodes PointToScreen et PointToClient ca devrait t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Point a;
            a = vApplication.Form.PointToScreen(vApplication.Form.Location);
    ca te donne la vraie position sur l'ecran de ton bord superieur gauche de ta fenetre (bordures comprises) j'ai essaye de pondre le bon code pour ton cas precis mais, j'avoue je suis trop fatigue

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ton aide.

    J'ai donc regarder du côté des methodes PointToScreen et PointToClient sur MSDN et voici donc mon code corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    01  private void SetMouseLook()
    02	{
    03  	//Mouse Look
    04		if(camera.MouseLook)
    05		{
    06			Cursor.Hide();
    07			// Reset angles.
    08			float angleY = 0.0f;
    09			float angleZ = 0.0f;
    10			
    11			// Get Middle Point Relative to Form
    12			Point middlePoint = new Point(vApplication.Width >> 1,vApplication.Height >> 1);
    13			
    14			// Get Mouse Current Position
    15			Point mousePos = new Point(Mouse.iX,Mouse.iY);
    16							
    17			//Reset Mouse Cursor
    18			Point FormPointDelta 		= vApplication.Form.PointToClient(vApplication.Form.Location); 
    19			Point FormLocationPoint	= vApplication.Form.Location;
    20			Cursor.Position = new Point(FormLocationPoint.X - FormPointDelta.X + middlePoint.X,
    21			                            FormLocationPoint.Y - FormPointDelta.Y + middlePoint.Y);
    22
    23			// Get Mouse Direction                                                                      
    24			angleY = (float)((middlePoint.X - mousePos.X)) / 1000.0f;                                   
    25			angleZ = (float)((middlePoint.Y - mousePos.Y)) / 1000.0f;                                   
    26			                                                                                            
    27			lastRotX = currentRotX;                                                                     
    28			currentRotX += angleZ;                                                                      
    29			                                                                                            
    30			if(currentRotX > 1.0f)                                                                      
    31			{                                                                                           
    32				currentRotX = 1.0f;                                                                       
    33				if(lastRotX != 1.0f)                                                                      
    34				{                                                                                         
    35					vVector vAxis = camera.view - camera.position;                                          
    36					vAxis.Cross(camera.up);                                                                 
    37					vAxis.Normalize();                                                                      
    38					camera.Rotate(-1.0f,vAxis.X,(Mouse.isInverted ? vAxis.Y : -vAxis.Y),vAxis .Z);          
    39				}                                                                                         
    40			}                                                                                           
    41			else                                                                                        
    42			{                                                                                           
    43				vVector vAxis = camera.view - camera.position;                                            
    44				vAxis.Cross(camera.up);                                                                   
    45				vAxis.Normalize();                                                                        
    46				camera.Rotate(angleZ,vAxis.X,(Mouse.isInverted ? vAxis.Y : -vAxis.Y),vAxis .Z);           
    47			}                                                                                           
    48			camera.Rotate(angleY,0,1,0);						                                                    
    49		}                                                                                             
    50	}
    aegypius.
    IDE : #Developp 1.0 RC3
    .Net Framework : 1.1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de centrage d'un tableau dans un float sous IE < 8
    Par boboss123 dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 19/10/2010, 09h49
  2. Réponses: 41
    Dernier message: 19/06/2007, 18h12
  3. Réponses: 9
    Dernier message: 19/09/2006, 16h50
  4. Réponses: 6
    Dernier message: 29/05/2006, 11h21
  5. Molette de la souris dans un formulaire
    Par djamy dans le forum IHM
    Réponses: 4
    Dernier message: 07/05/2006, 20h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo