Hey Laurent, ben plutôt le calcul je pense..
J'ai fait ceci pour le moment juste pour les tests :
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
using namespace sf;
int main()
{
int W = 400, H = 400;
RenderWindow app(VideoMode(H,W),"SFML Lifebar", Style::Titlebar);
Clock clock;
RectangleShape lifeBar(Vector2f(40,2));
lifeBar.setFillColor(Color::Red);
lifeBar.setPosition(100,100);
float life = 80;
while (app.isOpen())
{
Event event;
while (app.pollEvent(event))
{
switch (event.type)
{
case Event::Closed:
app.close();
break;
case Event::KeyReleased:
if (event.key.code == Keyboard::Escape)
app.close();
break;
}
}
if (Keyboard::isKeyPressed(Keyboard::Space) && clock.getElapsedTime().asMilliseconds()>500)
{
int degat = 5;
life -= degat;
float perLife = life * 40 / 100;
float adaptDegat = degat * perLife / 100;
cout << "life : " << life << endl;
lifeBar.setSize(Vector2f(lifeBar.getSize().x - adaptDegat, lifeBar.getSize().y));
cout << lifeBar.getSize().x << endl;
clock.restart();
}
app.clear();
app.draw(lifeBar);
app.display();
}
}
J'aimerais que la barre de vie qui fait 40 pixels diminue en fonction de la variable "Life" quand j'appuie sur espace ( qui enlève -5 hp à chaque pression ).
Si ma Life est à 180, la barre devrait se vider moins vite que si ma Life est à 120 par exemple...
Mais mon calcul ne semble pas correct..
J'ai essayé d'appliquer le principe de la règle des 3 de la manière suivante :
if (Keyboard::isKeyPressed(Keyboard::Space) && clock.getElapsedTime().asMilliseconds()>500)
{
int degat = 5;
life -= degat;
float perLife = (life / degat) * (lifeBar.getSize().x/100);
cout << "life : " << life << endl;
lifeBar.setSize(Vector2f(lifeBar.getSize().x - perLife, lifeBar.getSize().y));
cout << "sizebar : " << lifeBar.getSize().x << endl;
if (life <0)
life = 140;
clock.restart();
}
Mais la barre diminue beaucoup au début et ensuite trèèèèès lentement.. y a pas de proportion égale tout le long.. :-(