Jakoś mi się nudziło...
#include <SFML/Graphics.hpp>
#include <iostream>
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "TEST");
window.setFramerateLimit(100);
sf::Event event;
sf::Clock clock;
sf::Time time;
sf::RectangleShape figure_1(sf::Vector2f(50, 50));
figure_1.setFillColor(sf::Color::Red);
sf::RectangleShape figure_2(sf::Vector2f(200, 200));
figure_2.setPosition(sf::Vector2f(300, 200));
figure_2.setFillColor(sf::Color::Green);
sf::FloatRect rectangle_1(0, 0, 50, 50);
sf::FloatRect rectangle_2(300, 200, 200, 200);
sf::Vector2f velocity;
bool up = false;
bool down = false;
bool left = false;
bool right = false;
while(window.isOpen())
{
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
up = true;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
down = true;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
left = true;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
right = true;
velocity.x = 0;
velocity.y = 0;
if(up)
{
velocity.y = -500;
up = false;
}
if(down)
{
velocity.y = 500;
down = false;
}
if(left)
{
velocity.x = -500;
left = false;
}
if(right)
{
velocity.x = 500;
right = false;
}
figure_1.move(time.asSeconds() * velocity.x, 0);
rectangle_1.left += time.asSeconds() * velocity.x;
if(rectangle_1.intersects(rectangle_2))
{
if(velocity.x < 0)
{
figure_1.setPosition(figure_2.getPosition().x + figure_2.getSize().x, figure_1.getPosition().y);
rectangle_1.left = rectangle_2.left + rectangle_2.width;
std::cout << "Lewo" << std::endl;
}
if(velocity.x > 0)
{
figure_1.setPosition(figure_2.getPosition().x - figure_1.getSize().x, figure_1.getPosition().y);
rectangle_1.left = rectangle_2.left - rectangle_1.width;
std::cout << "Prawo" << std::endl;
}
}
figure_1.move(0, time.asSeconds() * velocity.y);
rectangle_1.top += time.asSeconds() * velocity.y;
if(rectangle_1.intersects(rectangle_2))
{
if(velocity.y < 0)
{
figure_1.setPosition(figure_1.getPosition().x, figure_2.getPosition().y + figure_2.getSize().y);
rectangle_1.top = rectangle_2.top + rectangle_2.height;
std::cout << "Gora" << std::endl;
}
if(velocity.y > 0)
{
figure_1.setPosition(figure_1.getPosition().x, figure_2.getPosition().y - figure_1.getSize().y);
rectangle_1.top = rectangle_2.top - rectangle_1.height;
std::cout << "Dol" << std::endl;
}
}
window.clear();
window.draw(figure_1);
window.draw(figure_2);
window.display();
time = clock.getElapsedTime();
clock.restart();
}
return 0;
}
Jeśli czegoś nie będziesz rozumiał, to pisz śmiało