Я создаю игру на C++, используя SFML, но у меня возникла проблема с перемещением фигур с помощью мыши.Обнаружение последней рисованной формы
Я рисую несколько фигур, каждая форма имеет свой собственный метод ввода рукописного ввода, и когда я обрабатываю событие окна, я петлю над векторным массивом и вызываю метод ввода дескриптора каждой фигуры.
void Plank::HandleInput(sf::Event event)
{
switch (event.type)
{
case sf::Event::MouseButtonPressed:
{
if (event.mouseButton.button == sf::Mouse::Button::Left)
{
m_MouseHold = true;
std::cout << "Left Press\n";
}
if (m_Shape.getGlobalBounds().contains(sf::Vector2f(sf::Mouse::getPosition(m_Game->m_Window))))
{
std::cout << "In Bounds\n";
m_MoveShape = true;
}
break;
}
case sf::Event::MouseButtonReleased:
{
m_MouseHold = false;
m_MoveShape = false;
break;
}
case sf::Event::MouseMoved:
{
if (m_MoveShape)
{
std::cout << "Move Shape\n";
m_Shape.setPosition(sf::Vector2f(sf::Mouse::getPosition(m_Game->m_Window)));
}
break;
}
default: break;
}
}
Проблема в том, что если две формы перекрываются, и вы нажимаете на то, где фигуры пересекаются, вы можете перемещать обе формы.
Я хочу только иметь возможность перемещать фигуру сверху, но я не мог понять, как после некоторых размышлений и исследований.
Я не знаю, как получить эту информацию через SFML, поэтому вам придется самостоятельно отслеживать это. Если вы определили стандартный порядок рисования фигур, то в обратном порядке расскажут, что было сделано совсем недавно. Например, если вы храните вектор фигур и просто рисуете путем итерации по этому вектору, вы можете выполнить итерацию в обратном порядке, чтобы определить, какую форму захватить. – 0x5453