salut,
j'essaye de simuler un saut pour mon gameplay sans vraiment utiliser de physique.
par exemple, il n'y a pas de collision entre mon joueur et mon terrain mais la hauteur du joueur est défini en fonction de sa position et de la hauteur du terrain a cette position.
et à partir de ça, j'essaye de trouver un algorythme pour que quand j'appuie sur la touche pour sauter, une boucle est déclancher qui simulerai le saut..
Code : Sélectionner tout - Visualiser dans une fenêtre à part playerPos.Y=terrain->getHeight(playerPos.X,playerPos.Z);
code de ma boucle de rendu pour le gameplay
j'ai essayé vite fait qq trucs pour voir comment je pourrai faire mais c'est un peu n'importe quoi.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 screenCenter.X=400; screenCenter.Y=300; camTargetRot.X=camTarget->getRotation().X+rotationSpeed*(screenCenter.Y-cursor.Y); //rot vertical if(camTargetRot.X>89)camTargetRot.X=89; if(camTargetRot.X<1)camTargetRot.X=1; camTargetRot.Y=camTarget->getRotation().Y+rotationSpeed*(screenCenter.X-cursor.X)*-1; //rot horizontal camTargetRot.Z=camTarget->getRotation().Z; playerRot.X=0; playerRot.Y=camTargetRot.Y; playerRot.Z=0; //cameraPos.X=camera->getPosition().X; //cameraPos.Y=camera->getPosition().Y; cameraPos.Z=camera->getPosition().Z+cameraDistance; playerPos.X=playerNode->getPosition().X; playerPos.Z=playerNode->getPosition().Z; playerPos.Y=terrain->getHeight(playerPos.X,playerPos.Z); if(keys[KEY_KEY_Z]) //moving foward { f32 roty_rad=playerRot.Y*PI/180; //convert to radian playerPos.Z += playerSpeed*cos(roty_rad); playerPos.X += playerSpeed*sin(roty_rad); } if(keys[KEY_KEY_S]) //moving back { f32 roty_rad=playerRot.Y*PI/180; playerPos.Z -= playerSpeed*cos(roty_rad); playerPos.X -= playerSpeed*sin(roty_rad); } if(keys[KEY_KEY_Q]) //straing left { f32 roty_rad=playerRot.Y; roty_rad -= 90; roty_rad *= PI/180; playerPos.Z += playerSpeed*cos(roty_rad); playerPos.X += playerSpeed*sin(roty_rad); } if(keys[KEY_KEY_D]) //straing right { f32 roty_rad=playerRot.Y; roty_rad += 90; roty_rad *= PI/180; playerPos.Z += playerSpeed*cos(roty_rad); playerPos.X += playerSpeed*sin(roty_rad); } ///////////////////////////////////////////////////////////////////////////////// ////////////////////// LE SAUT //////////////////////////////////////////////////////////////////////////////// if(keys[KEY_KEY_E]) { for(u32 jumptime=0;jumptime<200;) { u32 jump_value=playerPos.Y-terrain->getHeight(playerPos.X,playerPos.Z)/jumptime; playerPos.Y=playerPos.Y+jump_value; jumptime++; //playerPos.Y=playerPos.Y+35.0f; //backup } } if(keys[KEY_KEY_A])playerPos.Y=playerPos.Y-18.0f; camera->setTarget(camTarget->getPosition()); camera->setPosition(cameraPos); playerNode->setPosition(playerPos); playerNode->setRotation(playerRot); camTarget->setPosition(playerPos); camTarget->setRotation(camTargetRot); myCursor->setPosition(400,300);
disons qu'il faut que je puisse definir d'une certaine manière combien de temps ma pseudo animation durera.
il faut que je sépare ça en deux pour simuler l'ascension et la chute.
il faut qu'à partir du moment ou le saut soit déclancher, le joueur ne puisse plus bouger car il ne vol pas, il est en train de sauter. (il peut toujours pivoter)
il faut que la velocité du saut soit en rapport avec la vitesse (simplifiée) et la direction du joueur.
il faut qu'en fonction de la hauteur du lieu d'attérissage, la boucle du temps de saut s'arrête.
ce qui fait beaucoup de "il faut" et j'sais pas trop comment faire la.
mon projet pour l'instant :
http://www.fileden.com/files/2006/6/...5/Demo_III.zip
Partager