【发布时间】:2017-02-08 21:23:18
【问题描述】:
我正在使用 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 获取此信息,因此您必须自己跟踪。如果您已经定义了绘制形状的标准顺序,那么相反的顺序会告诉您最近绘制的内容。例如,如果您存储一个形状向量并通过迭代该向量来简单地绘制,那么您可以反向迭代以确定要抓取的形状。