Page 1 sur 1

Gestion de mouvement style FPS

Publié : dim. 18/sept./2005 15:51
par CORBASE
Cela fait maintenant un petit moment que je cherche comment faire, mais en vain ...

De ce fait je vais solliciter vos neuronnes :lol:

Alors, je voudrais faire défiler la caméra comme dans uun fps. C'est à dire que l'on pointe avec la souris la direction ou l'on veux aller, et on posse 4 commande à savoir : Avancer, reculer, droite, gauche.

Pour le moment je me suis focaliser sur la manière de bouger la souris avec la fontion CameraLookAt(). Je récupère la position de ma souris avec les fonctions MouseDeltaX() et MouseDeltaY(). Soit :

Code : Tout sélectionner

  mouse_x = mouse_x + (MouseDeltaX()/2)
  mouse_y = mouse_y - (MouseDeltaY()/2)
  CameraLookAt(0,mouse_x,mouse_y,move_z) ; move_z est une constante
Ensuite je n'arrive pas a faire la relation entre l'objet pointer par la caméra, et le mouvement que je voudrais effectivement faire.

Si je ne suis pas clair dans mes explications posez-moi des questions :)

Merci de vos réponses :roll:

Publié : mar. 20/sept./2005 21:21
par CORBASE
J'ai un peu avancer dans le fait ou je m'étais tromper sur la constante y qui est totalement fausse.

Finalement j'ai pensez qu'appliquer pythagore pour la calculer serais le mieux, soit :

Code : Tout sélectionner

  ;/ Gestion da la vision 
  mouse_x = mouse_x + (MouseDeltaX()/2)
  mouse_y = mouse_y - (MouseDeltaY()/2)
  move_z = Sqr((10 * 10) - mouse_x)
  CameraLookAt(0,mouse_x,mouse_y,move_z)
En fait je me dis que l'angle de vue fait par la souris est en fait un cercle de 10. De ce fait, tout chemin de 0 à y aura la meme longueur soit 10. Ensuite connaissant la valeur de x et de la longueur 0 > y je calcule z via pythagore ...

Si quelqu'un pourrais me dire ce qu'il pense de cette théorie, ça serais sympa :)

Publié : mer. 21/sept./2005 20:43
par CORBASE
Bon, en fait en regardant de plus près les example fournis dans PB, j'ai trouver ma solution ...

Si quelqu'un a galérer comme moi je lui donne la solution !

Code : Tout sélectionner

  ;/ Gestion da la vision 
  
  If KeyboardPushed(#PB_Key_Left)
    KeyX = -#CameraSpeed 
  ElseIf KeyboardPushed(#PB_Key_Right)
    KeyX = #CameraSpeed 
  Else
    KeyX = 0
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    KeyY = -#CameraSpeed 
  ElseIf KeyboardPushed(#PB_Key_Down)
    KeyY = #CameraSpeed 
  Else
    KeyY = 0
  EndIf
  
  
  MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
  MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
  
  RotateCamera(0, MouseX, MouseY, RollZ)
  MoveCamera  (0, KeyX, 0, KeyY)