0
我使用SFML在C++中創建遊戲,但遇到了使用鼠標移動形狀的問題。檢測最後繪製的形狀
我繪製了多個形狀,每個形狀都有自己的句柄輸入方法,當我處理窗口事件時,我遍歷矢量數組並調用每個形狀的句柄輸入方法。
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