Gestion de mouvement style FPS

Programmation avancée de jeux en PureBasic
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Gestion de mouvement style FPS

Message 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:
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Message 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 :)
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Message 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)
Répondre