Hej, chciałbym poprosić was o subiektywną ocenę mojego projektu w c++, w SFML. Nie pokoi mnie jedna rzecz. Jakby się tak przyjrzeć każdej kropli, to podczas spadania, w pewnym momencie lekko cofa się do góry. Kod wklejam tutaj, bo nie jest długi, ~60 linijek.
#include <SFML/Graphics.hpp>
#include <windows.h>
#include <vector>
using namespace sf;
using namespace std;
class rain : public RectangleShape
{
public:
float speed; // zmienna przechowujaca predkosc kropli
rain (float x, float y) : RectangleShape (Vector2f(x, y)) {};
};
vector <rain> RainVector;
RenderWindow window;
int main ()
{
srand (time(NULL));
window.create (VideoMode(960, 540), "Rain in SMFL", Style::Titlebar | Style::Close);
window.setActive (true);
window.setVerticalSyncEnabled (true);
Event e;
while (window.isOpen())
{
while (window.pollEvent(e))
{
if (e.type == Event::Closed || Keyboard::isKeyPressed(Keyboard::Escape)) window.close ();
}
/// generowanie 4 nowych kropli na jedna klatke
for (int i = 0; i < 4; i++)
{
RainVector.push_back(rain(2, 20));
RainVector.back().setFillColor(Color::Blue);
RainVector.back().setOrigin(0, 0);
RainVector.back().setPosition(rand()%959, -20);
RainVector.back().speed = rand()%10+4; // ustawienie losowej predkosci
}
/// zrzucenie kazdej kropli
for (int i = 0; i < RainVector.size(); i++)
{
int x, y; // pozycja kropli
int v; // szybkosc kropli
x = RainVector[i].getPosition().x;
y = RainVector[i].getPosition().y;
v = RainVector[i].speed;
if (y > 540) RainVector.erase(RainVector.begin()+i); // sprawdzenie czy kropla nie wyszla poza okno
else
{
RainVector[i].speed += 0.10; // przespieszenie spadania deszczu
RainVector[i].setPosition(x, y+v); // zrzucenie kropli
}
}
window.clear (Color::White);
/// rysowanie deszczu
for (int i = 0; i < RainVector.size(); i++)
{
window.draw (RainVector[i]);
}
window.display();
}
}