检测上次绘制的形状
Detect Last Drawn Shape
我正在使用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 Pressn";
}
if (m_Shape.getGlobalBounds().contains(sf::Vector2f(sf::Mouse::getPosition(m_Game->m_Window))))
{
std::cout << "In Boundsn";
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 Shapen";
m_Shape.setPosition(sf::Vector2f(sf::Mouse::getPosition(m_Game->m_Window)));
}
break;
}
default: break;
}
}
问题是,如果两个形状重叠,并且您单击形状相交的位置,则可以移动两个形状。
我只想移动顶部的形状,但经过一番思考和研究,我无法弄清楚如何移动。
所以我做了一些类似于你说的@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;
}
}
相关文章:
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 落砂模拟碰撞检测C++和SFML
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 在 c++ 生成器中检测绘制线的窗口坐标的最佳方法
- 检测上次绘制的形状
- 使用OpenCV教程中的任何一个进行人脸检测是否有任何函数可以计算绘制在人脸上的矩形的大小
- QWidget::重新绘制:更新进度条时检测到递归重新绘制
- 如何在OpenCV 3.1上使用SIFT特征绘制检测对象
- 检测窗口是否完成绘制并显示在屏幕上(WINAPI)