Dessin des vecteurs accélération et vitesse pour les tests
This commit is contained in:
parent
f740cd6441
commit
50210b669e
|
@ -8,19 +8,28 @@
|
||||||
|
|
||||||
class PhysicsObject : public Object {
|
class PhysicsObject : public Object {
|
||||||
protected:
|
protected:
|
||||||
sf::Vector2f velocity;
|
|
||||||
float mass;
|
float mass;
|
||||||
|
sf::Vector2f acceleration;
|
||||||
|
sf::VertexArray accelLine;
|
||||||
|
sf::Vector2f velocity;
|
||||||
|
sf::VertexArray velLine;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calcule les forces appliquées à l'objet
|
* Calcule les forces appliquées à l'objet
|
||||||
*/
|
*/
|
||||||
virtual sf::Vector2f getForces(State state);
|
virtual sf::Vector2f getForces(State state);
|
||||||
|
|
||||||
static constexpr float GRAVITY = 275;
|
static constexpr float GRAVITY = 20;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PhysicsObject(float x, float y) :
|
PhysicsObject(float x, float y) :
|
||||||
Object(x, y), mass(1) {}
|
Object(x, y), mass(1), accelLine(sf::LinesStrip, 2),
|
||||||
|
velLine(sf::LinesStrip, 2) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dessine l'objet dans la fenêtre donnée
|
||||||
|
*/
|
||||||
|
virtual void draw(sf::RenderWindow& window);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Met à jour la physique de l'objet juste avant le dessin d'une frame
|
* Met à jour la physique de l'objet juste avant le dessin d'une frame
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#include "ball.hpp"
|
#include "ball.hpp"
|
||||||
|
|
||||||
void Ball::draw(sf::RenderWindow& window) {
|
void Ball::draw(sf::RenderWindow& window) {
|
||||||
|
PhysicsObject::draw(window);
|
||||||
|
|
||||||
// chargement de la texture de test
|
// chargement de la texture de test
|
||||||
if (!texture.loadFromFile("./res/ball.png")) {
|
if (!texture.loadFromFile("./res/ball.png")) {
|
||||||
// erreur
|
// erreur
|
||||||
|
|
|
@ -1,9 +1,27 @@
|
||||||
#include "physics_object.hpp"
|
#include "physics_object.hpp"
|
||||||
|
|
||||||
|
void PhysicsObject::draw(sf::RenderWindow& window) {
|
||||||
|
velLine[0].position = position;
|
||||||
|
velLine[0].color = sf::Color::Green;
|
||||||
|
velLine[1].position = position + velocity * 1.f;
|
||||||
|
velLine[1].color = sf::Color::Green;
|
||||||
|
|
||||||
|
accelLine[0].position = position;
|
||||||
|
accelLine[0].color = sf::Color::Red;
|
||||||
|
accelLine[1].position = position + acceleration * 1.f;
|
||||||
|
accelLine[1].color = sf::Color::Red;
|
||||||
|
|
||||||
|
window.draw(velLine);
|
||||||
|
window.draw(accelLine);
|
||||||
|
}
|
||||||
|
|
||||||
void PhysicsObject::update(State state) {
|
void PhysicsObject::update(State state) {
|
||||||
sf::Vector2f acceleration = getForces(state) / mass;
|
// intégration de la vitesse dans la position
|
||||||
velocity += acceleration * state.delta;
|
|
||||||
position += velocity * state.delta;
|
position += velocity * state.delta;
|
||||||
|
|
||||||
|
// intégration des forces appliquées sur l'objet dans la vitesse
|
||||||
|
acceleration = getForces(state) / mass;
|
||||||
|
velocity += acceleration * state.delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
sf::Vector2f PhysicsObject::getVelocity() {
|
sf::Vector2f PhysicsObject::getVelocity() {
|
||||||
|
|
Loading…
Reference in New Issue