【发布时间】:2014-12-18 08:17:40
【问题描述】:
我已经阅读了有关鼠标事件的文档,并且还阅读了有关鼠标输入处理的教程。不过,这个问题依然存在:
我有一个相机和一个 opengl 上下文,我只是希望相机在鼠标移动并单击鼠标左键时旋转。所以,自然而然的写了这段代码:
void processEvents()
{
float deltaX = 0;
float deltaY = 0;
while (SDL_PollEvent(&pEvent) != 0)
{
if (pEvent.type == SDL_QUIT)
pApp_isRunning = false;
if (pEvent.type == SDL_MOUSEMOTION && pEvent.button.button == SDL_BUTTON_LEFT)
{
deltaX += pEvent.motion.x;
deltaY += pEvent.motion.y;
pCamera.rotate(deltaX / REFRESH_RATE, deltaY / REFRESH_RATE);
cout << "Mouse = (" << deltaX << ", " << deltaY << ")" << endl;
}
if (pEvent.type == SDL_MOUSEMOTION && pEvent.button.button == SDL_BUTTON_RIGHT)
{
deltaX += pEvent.motion.x;
deltaY += pEvent.motion.y;
pCamera.rotate(deltaX / REFRESH_RATE, deltaY / REFRESH_RATE);
cout << "Mouse = (" << deltaX << ", " << deltaY << ")" << endl;
}
}
}
左鼠标似乎正在响应该事件,因为它更新了运动坐标。但是,如果我使用完全相同的代码但只使用 SDL_BUTTON_RIGHT,则什么也不会发生!就好像 SDL 需要另一种方式来理解鼠标右键。我曾与 GLFW、SFML、GLUT、Qt 合作过,并且 SDL 在 grepping 鼠标右键事件方面没有一致性是令人眼花缭乱的 imo。我在这里做错了什么?有没有按照我描述的方式处理鼠标输入的正确方法?如:
如果单击鼠标左键并且鼠标已移动:旋转相机。 如果单击鼠标右键并且鼠标已移动:旋转相机。我一定在这里遗漏了什么,或者可能是 SDL2 的错误。
【问题讨论】: