g = 9.81
Sinon oui pour le fait que ça descend je n'ai pas édité mon code mais j'avais simplement ajouter "-" devant jump.y vu que c'est inversé.
void Game::play()
{
gState = GAME_STATE::G_RUNNING;
Map map;
map.load(".\\Data\\Map\\level.map", "tile");
Character player(sf::Vector2f(0, 0), "player");
player.setCenter();
float v_init = 0.15;
int angle_init = Utils::pi/3;
float t = 0;
while (getWindow().isOpen() && gState == GAME_STATE::G_RUNNING)
{
sf::Event event;
while (getWindow().pollEvent(event))
{
if (event.type == sf::Event::Closed)
getWindow().close();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
gState = GAME_STATE::G_PAUSED;
break;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
getView().move(3, 0);
}
sf::Vector2f jump, lastPos, newPos;
jump.x = cos(angle_init) * v_init * t;
jump.y = -(-Utils::g*pow(t, 2)/2000 + v_init*sin(angle_init)*t);
lastPos = player.getPosition();
newPos = lastPos + jump;
player.setPosition(newPos);
t += 0.2;
getWindow().clear(sf::Color::Black);
getWindow().setView(getView());
getWindow().draw(map);
getWindow().setView(getWindow().getDefaultView());
getWindow().draw(player);
getWindow().display();
}
}
Voici le code modifié, ou je déplace le sprite avec setPosition mais plus la vue.
Ça fait bien une parabole depuis que j'ai diminué la vitesse initiale à 0.15 et t avec une incrémentation de 0.2.
Ce qui me pose maintenant soucis c'est que j'aimerais bien savoir comment avoir mathématiquement la bonne valeur de t et de v_init, sans faire ça au pif x)