Bonjour à tous,

C'est mon premier message sur les forums de Developpez.com. Je suis à la recherche d'une solution pour une problème qui me prends la tête depuis 3 jours non-stop ! Le voici :

Nous sommes dans un jeu vidéo (FPS) et ma souris marche à la perfection de gauche à droite (ou l'inverse), de haut en bas (ou l'inverse) mais pas des deux en même temps. Si j'utilise les deux en même temps, j'ai une rotation de tout le décor qui se fait (ou de moi-même). Pour l'instant la seule solution, c'est de virer les transformations Y pour qu'on puisse seulement tourner sur l'abscisse mais j'aimerai vraiment pouvoir utiliser la souris convenablement :/

Ca c'est les lignes de code qui vont faire rotater ma souris :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
  Matrx := Matrix.Multiply(Matrx,Matrix.RotationX(Axis.Y));
  Matrx := Matrix.Multiply(Matrx,Matrix.RotationY(Axis.X));
Et j'ai quelqu'un qui m'a dit que ca venait sûrement du fait que ma fenêtre n'était pas délimité, donc j'ai ça aussi dans mon Mouse.pas :

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
begin
  if Active then
   begin
 
    PositionMouseX := FCamera.Positionx;
    PositionMouseY := FCamera.PositionY;
    PositionMouseZ := FCamera.PositionZ;
    screenwidth := 1680;
    screenheight := 1050;
    sensi := 0.002;
    dev.Poll;
    state := dev.CurrentMouseState;
    Axis.X := (-state.X)/200;
    Axis.Y := 0;//(-state.Y)/200;
    Axis.Z := 0;
    mouse_rl := (PositionMouseX-screenWidth/2)*sensi;
    mouse_up := (PositionMouseY-screenheight/2)*sensi;
if Axis.X < -60 then
    begin
    Axis.X := (screenwidth/2)*sensi;
    Matrix.RotationX(Axis.X -(mouse_up/screenheight));
    end;
if Axis.X > 60 then
    begin
    Axis.X := (screenwidth/2)*sensi;
    Matrix.RotationX(Axis.X +(mouse_up/screenheight));
    end;
if Axis.Y < -60 then
    begin
    Axis.Y := (screenheight/2)*sensi;
    Matrix.RotationY(Axis.Y - (mouse_rl/screenwidth));
    end;
if Axis.Y > 60 then
    begin
    Axis.Y:= (screenheight/2)*sensi;
    Matrix.RotationY(degtoRad(Axis.Y + (mouse_rl/screenwidth)));
    end;
Si quelqu'un à une idée ? :/