Bonjour,
Actuellement je m’amuse un peu avec la SFML et j’essaye de réaliser une trajectoire parabolique lors d’un lancé de flèche par exemple.
Pour commencer, je récupère l’angle (que je vais appeler a dans le reste du texte) de tir de mon personnage grâce à atan. Ensuite j’incrémente la position de mon projectile avec cos(a) et sin(a). Donc jusque là, tout est OK, le projectile pars dans la bonne direction.
Cependant, j’aimerai donner un côté réaliste à la chose en appliquant une gravité progressive, qui viendrait petit à petit ralentir mon projectile et le faire chuter (en gros une parabole).
J’ai déjà essayé quelques méthodes qui me paraissait logiques mais qui à priori ne fonctionnent pas. Comme par exemple, ajouter un membre "velocityY" à chacun de mes projectiles, et à chaque update venir décrémenter cette variable à l’aide d’une constante gravity et du temps entre 2 frames. Cette méthode n’a pas fonctionné, et faisait tombé instantanément mes projectiles …
Voici la méthode "Update" de ma classe collection de projectiles:
void Balls::Update(float deltaTime) {
int i = 0;
for (Ball &ball : m_Balls) {
// Pour la balle courante, on ajoute sa vélocité en Y
ball.SetVelocityY(ball.GetVelocityY() + GRAVITY * deltaTime);
float speed = m_nVelocity * deltaTime;
int x = ball.GetPosition().x + cos(ball.GetAngle()) * speed;
int y = ball.GetPosition().y - sin(ball.GetAngle()) * ball.GetVelocityY();
}
}
Voilà, en remerciant déjà ceux qui prendront la peine de me répondre