//Poruszanie obiektu w stronę kursora myszy o podaną prędkość
//2015 Patrycjerz
#include <SFML/Graphics.hpp>
#include <cmath>
int main()
{
sf::RenderWindow window(sf::VideoMode(600, 600), "Test"); // Stworzenie okna
window.setFramerateLimit(100); // Nadanie maksymalnej wartości FPS na 100
sf::Event event; // Obiekt zdarzeń
sf::Clock clock; // Obiekt zegara
sf::Time time; // Obiekt czasu
const float rectangle_x = 50; // Szerokość kwadratu
const float rectangle_y = 50; // Wysokość kwadratu
sf::RectangleShape rectangle(sf::Vector2f(rectangle_x, rectangle_y)); // Stworzenie kwadratu
rectangle.setFillColor(sf::Color::Red); // Nadanie mu koloru czerwonego
sf::Vector2i mouse_position; // Pozycja kursora myszy
const float velocity_value = 100; // Wartość wektora prędkości
sf::Vector2f velocity(0, 0); // Składowe wektora prędkości
float x; // Różnica pozycji iksowych kursora i kwadratu
float y; // Różnica pozycji igrekowych kursora i kwadratu
float z; // Odległość pomiędzy kursorem i kwadratem
while(window.isOpen())
{
// Zdarzenia
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
}
mouse_position = sf::Mouse::getPosition(window); // Pobranie pozycji kursora myszy
if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) // Jeśli naciśnięty lewy przycisk myszy
{
x = static_cast<float>(mouse_position.x) - rectangle.getPosition().x - (rectangle_x / 2); // Obliczenie różnicy pozycji iksowych kursora i kwadratu
y = static_cast<float>(mouse_position.y) - rectangle.getPosition().y - (rectangle_y / 2); // Obliczenie różnicy pozycji igrekowych kursora i kwadratu
z = sqrtf(x * x + y * y); // Obliczenie odległości pomiędzy kursorem i kwadratem za pomocą twierdzenia Pitagorasa
velocity.x = (x * velocity_value) / z; // Obliczenie składowej iksowej wektora prędkości za pomocą własności podobieństwa trójkątów
velocity.y = (y * velocity_value) / z; // Obliczenie składowej igrekowej wektora prędkości za pomocą własności podobieństwa trójkątów
rectangle.move(velocity.x * time.asSeconds(), velocity.y * time.asSeconds()); // Przesunięcie kwadratu o podany wektor prędkości
}
window.clear(); // Czyszczenie ekranu
window.draw(rectangle); // Narysowanie kwadratu
window.display(); // Wyświetlenie wszystkiego na ekranie
time = clock.getElapsedTime(); // Nadanie zmiennej czasowej nowej wartości
clock.restart(); // Restart zegara (mierzy czas od nowa/od zera)
}
return 0;
}
Kolejny raz piszę program "na zamówienie", ale dzięki temu umiem zrobić coś takiego (sam myślałem nad tym chwilę). Więc wilk syty i owca cała