@MrRangerYT

Реализовать перетаскивание квадрата с помощью курсора мыши при нажатой левой кнопке мыши и нажатий на стрелки как можно реализовать?

Всем привет! Изучаю SFML нашел такую задачу но не получается решить уже второй день, помогите пожалуйста

Некорректно работает перетаскивание курсора при нажатой левой клавиши. То есть двигается только вниз и вправо. как я понял это потому что точка отсчета идет от левого верхнего угла, но как изменить эту точку отсчета не понимаю. То есть надо чтоб точка отсчета была там где мышка на этом квадрате.И если быть по точнее, то ошибка, как мне кажется, где - то с 50 по 60 строки.
#include <SFML/Graphics.hpp>
 
using namespace sf;
 
int main()
{
    int x = 200,y = 200;
    RenderWindow window(VideoMode(800,800), "SFML works!");
 
    RectangleShape okolo(Vector2f(200,200));
    okolo.setFillColor(Color::Black);
    okolo.setPosition(Vector2f(x,y));
 
    while (window.isOpen())
    {
        Event event;
        while (window.pollEvent(event))
        {
            if(event.type == Event::KeyPressed)
            {
                if(event.key.code == Keyboard::Left)
                {
                    okolo.setPosition(Vector2f(x-200,y));
                    x-=200;
                }
            }
            if(event.type == Event::KeyPressed)
            {
                if(event.key.code == Keyboard::Right)
                {
                    okolo.setPosition(Vector2f(x+200,y));
                    x+=200;
                }
            }
            if(event.type == Event::KeyPressed)
            {
                if(event.key.code == Keyboard::Up)
                {
                    okolo.setPosition(Vector2f(x,y-200));
                    y-=200;
                }
            }
            if(event.type == Event::KeyPressed)
            {
                if(event.key.code == Keyboard::Down)
                {
                    okolo.setPosition(Vector2f(x,y+200));
                    y+=200;
                }
            }
            if (Mouse::isButtonPressed(Mouse::Left))
            {
                if(okolo.getGlobalBounds().contains(Mouse::getPosition(window).x,Mouse::getPosition(window).y))
                {
                        okolo.setPosition(Vector2f(Mouse::getPosition(window).x, Mouse::getPosition(window).y));
                        x = Mouse::getPosition(window).x;
                        y = Mouse::getPosition(window).y;
                }
            }
 
        }
 
        if (event.type == Event::Closed)
            window.close();
 
 
        window.clear(Color::White);
        window.draw(okolo);
        window.display();
 
 
    }
 
    return 0;
}
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы