Задать вопрос
@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;
}
  • Вопрос задан
  • 281 просмотр
Подписаться 1 Простой 12 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Яндекс Практикум
    Мидл разработчик С++
    4 месяца
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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