如何获取鼠标点击的x,y坐标,看它是否在我的directx绘制的菜单按钮上?目前,我的代码库有以下鼠标相关的类似乎无法给我这个..我不知道这可能如何工作。
InputMouse::InputMouse() :
m_LastX(-1),
m_LastY(-1)
{
m_MouseActionEvent.clear();
}
InputMouse::~InputMouse()
{
}
void InputMouse::PostUpdate()
{
m_CurrentAction.clear();
}
bool InputMouse::IsEventTriggered(int eventNumber)
{
for (unsigned int i = 0; i < m_CurrentAction.size(); i++)
{
if (m_MouseActionEvent.size() > 0 && m_MouseActionEvent[m_CurrentAction[i]] == eventNumber)
{
return true;
}
}
return false;
}
void InputMouse::AddInputEvent(int action, int eventNumber)
{
m_MouseActionEvent[action] = eventNumber;
}
void InputMouse::SetMouseMouse(int x, int y)
{
if (m_LastX != -1)
{
if (x > m_LastX)
{
m_CurrentAction.push_back(MOUSE_RIGHT);
}
else if (x < m_LastX)
{
m_CurrentAction.push_back(MOUSE_LEFT);
}
if (y > m_LastY)
{
m_CurrentAction.push_back(MOUSE_UP);
}
else if (y < m_LastY)
{
m_CurrentAction.push_back(MOUSE_DOWN);
}
}
m_LastX = x;
m_LastY = y;
}
答案 0 :(得分:2)
如果您的菜单按钮是2D,则应该像记住用于按钮的屏幕坐标一样简单。
如果您正在尝试确定点击是否落在已渲染的3D对象上,那么您正在寻找的技术称为 Picking 。
"directx picking"的简单Google可以带来一些好结果:
基本上,该技术涉及将鼠标点击转换为场景中的光线。对于您的菜单项,一个简单的边界框可能足以确定“点击”。
答案 1 :(得分:1)
DirectX与否,GetCursorPos将在屏幕坐标中检索鼠标的位置。 ScreenToClient会将屏幕相对点映射到相对于窗口/ directX表面的客户区域的点。
答案 2 :(得分:0)
一旦绘制了一个对象,系统就不知道它改变了屏幕上的哪些像素,这些像素也不知道哪个或哪些对象改变了它(这些对象是否仍然存在)。因此,如果您需要知道屏幕上的某些内容,则必须自己进行跟踪。对于按钮和其他GUI元素,这通常意味着将GUI与定义每个元素边界的矩形一起保存在内存中。然后,您可以将鼠标位置与每个元素的边界进行比较,以查看它所指向的位置。