[RESOLU] Fonctions N3xt-D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

[RESOLU] Fonctions N3xt-D

Message par Anonyme 2 »

Yo!
Je rencontre un ptit problème:

Code : Tout sélectionner

If iGetKeyDown(#KEY_ARROW_UP)
    iMoveNode(*cam, 0, 0, 0.1)
    iFrameLoopAnimation(*ninja, 1, 13)
    Repeat
      If iGetKeyDown(#KEY_ARROW_UP)
        iMoveNode(*cam, 0, 0, 0.1)          
        xcam=iNodeX(*cam)        
        ycam=iNodeY(*cam)        
        zcam=iNodeZ(*cam)        
        iPositionNode(*ninja, xcam, ycam-15, zcam-12)         
      EndIf
      omx=iGetMouseX()-width/2      
      omy=iGetMouseY()-height/2      
      iPositionCursorControl(width/2,height/2)
      pitch=pitch+omy/10
      yaw=yaw-omx/10
      iRotateNode(*cam,pitch,-yaw,0)
      iRotateNode(*ninja, 0, -yaw, 0)  
      iBeginScene(50, 50, 50)      
      iDrawScene()   
      iEndScene()
    Until iGetKeyUp(#KEY_ARROW_UP)    
    iFrameLoopAnimation(*ninja, 206, 252)    
  EndIf  
Dans ce code, je fais bouger la camera, qui fait bouger le ninja (car il se positionne en fonction de la position de la camera).
Mon probleme c'est que je ne sais pas comment faire pour que, lorsque je tourne la camera vers la gauche (ce qui signifie que yaw<180), le ninja se positionne devant la camera, et que les touches directionnel s'adaptent a nouveau en fonction de la vue de la camera.
:roll:
En gros, comme exemple: j'avance la camera (le ninja aussi), puis je tourne a gauche avec la souris, ce qui tourne la camera, et le ninja se positionne toujours devant la camera (là et le 1er probleme) et se tourne aussi, puis je continue de bouger normalement avec les touches (là et le deuxième problème).
Dernière modification par Anonyme 2 le jeu. 01/sept./2011 20:51, modifié 1 fois.
Avatar de l’utilisateur
Ouaf-Ouaf
Messages : 212
Inscription : dim. 11/juil./2004 9:07

Re: Fonctions N3xt-D, problèmes.

Message par Ouaf-Ouaf »

Je suis pas sur de comprendre. Le ninja est il un personnage joué à la troisième personne ?

Dans ce cas, je verrais plus la caméra se positionner en fonction du ninja que le contraire. M'enfin hein, même résultat =p

En gros, la caméra est située sur un périmètre autour du ninja, et 'glisse' sur ce cercle, un peu plus lentement que le mouvement du ninja, pour finalement, venir se situer toujours dans son dos ?

Pour les touches et la direction que le perso doit prendre sur la carte, ça reste "une affaire de sinus/cosinus"..
En appuyant sur Up, le perso augmente sa progression sur une droite ayant un rapport de "tel angle" avec une droite arbitraire "située sur la carte" ( axe nord-sud par exemple ).

Quoi qu'il en soit, à part dire que tout ça est une affaire d'angle et de cercles, et que tout ça tourne autour d'une histoire de trigonométrie .. =p

T'es au frais là dessus ? ( Désolé si je dis n'imp' ! )

Bn
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Fonctions N3xt-D, problèmes.

Message par Anonyme 2 »

Je viens de trouver 8O :

Code : Tout sélectionner

*bone.IBoneNode = iAnimationJointNode(*ninja, 4)
iAddChildNode(*bone, *cam)
avec ca pour le diriger:

Code : Tout sélectionner

omx=iGetMouseX()-width/2
omy=iGetMouseY()-height/2
pitch=pitch+omy/10
yaw=yaw-omx/10
iRotateNode(*ninja, 0, -yaw,0)    
+touches directionnelles:

Code : Tout sélectionner

If iGetKeyDown(#KEY_ARROW_UP)
    iMoveNode(*ninja, 0, 0, 4)
    iFrameLoopAnimation(*ninja, 1, 13)
    Repeat
      If iGetKeyDown(#KEY_ARROW_UP)
        iMoveNode(*ninja, 0, 0, 4)   
      EndIf
      If iGetKeyDown(#KEY_SPACE)        
        iJumpCollisionResponse(*anim, 2)         
      EndIf            
      omx=iGetMouseX()-width/2      
      omy=iGetMouseY()-height/2
      pitch=pitch+omy/10
      yaw=yaw-omx/10
      iRotateNode(*ninja, 0, -yaw, 0)  
      iBeginScene(50, 50, 50)
      iDrawScene()    
      iEndScene()
    Until iGetKeyUp(#KEY_ARROW_UP)    
    iFrameLoopAnimation(*ninja, 206, 252)
  EndIf  
  If iGetKeyDown(#KEY_ARROW_DOWN)
    iMoveNode(*ninja, 0, 0, -4)
    iFrameLoopAnimation(*ninja, 1, 13)
    Repeat
      If iGetKeyDown(#KEY_ARROW_DOWN)
        iMoveNode(*ninja, 0, 0, -4)
      EndIf
      If iGetKeyDown(#KEY_SPACE)         
        iJumpCollisionResponse(*anim, 2)          
      EndIf      
      omx=iGetMouseX()-width/2            
      omy=iGetMouseY()-height/2   
      pitch=pitch+omy/10
      yaw=yaw-omx/10
      iRotateNode(*ninja, 0, -yaw, 0)
      iBeginScene(50, 50, 50)
      iDrawScene() 
      iEndScene()
    Until iGetKeyUp(#KEY_ARROW_DOWN)    
    iFrameLoopAnimation(*ninja, 206, 252)
  EndIf
Je me suis pris la tête alors que c'était facile comme.. bonjour! :?
Répondre