检测最后绘制的形状 我用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您可以反向迭代以确定要抓取的形状。