检测最后绘制的形状 我用SfML创建了一个C++游戏,但是我用鼠标移动了一个形状。

检测最后绘制的形状 我用SfML创建了一个C++游戏,但是我用鼠标移动了一个形状。,c++,sfml,C++,Sfml,我画了多个形状,每个形状都有自己的句柄输入法,当我处理窗口事件时,我循环一个向量数组并调用每个形状的句柄输入法 void Plank::HandleInput(sf::Event event) { switch (event.type) { case sf::Event::MouseButtonPressed: { if (event.mouseButton.button == sf::Mouse::Button::Left) {

我画了多个形状,每个形状都有自己的句柄输入法,当我处理窗口事件时,我循环一个向量数组并调用每个形状的句柄输入法

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;
    }
}
void Plank::HandleInput(sf::事件)
{
开关(事件类型)
{
案例sf::事件::鼠标按钮按下:
{
if(event.mouseButton.button==sf::Mouse::button::Left)
{
m_MouseHold=真;
标准::cout m_Window)
{

std::cout所以我做了一些类似于您所说的@0x5453的事情

在我的窗口轮询事件中,我在我的形状数组上循环,并首先将包含鼠标的形状的数组位置存储在其全局边界中。然后从那里开始,我简单地将形状移动到我注意到的数组位置

for (size_t i = m_PlankObjects.size(); i-- > 0;)
{
    if (m_PlankObjects[i].m_Shape.getGlobalBounds().contains(sf::Vector2f(sf::Mouse::getPosition(m_Game->m_Window))))
    {
        selectedObject = i;
        break;
    }
}

据我所知,没有办法通过SFML获得这些信息,因此您必须自己跟踪。如果您定义了绘制形状的标准顺序,则相反的顺序将告诉您最近绘制了什么。例如,如果您存储了一个形状向量,并仅通过在该向量上迭代来绘制,则n您可以反向迭代以确定要抓取的形状。