2

我想使用 glutmotionfunc() 来获取拖动动作开始和结束时的 x 位置,即这样我可以得到 x 的变化。有没有一种简单的方法可以做到这一点?

4

1 回答 1

9

我认为glutmotionfunc()不会像您期望的那样工作。

当拖动完成时,注册的回调不仅被调用一次。相反,每次移动鼠标时都会调用它,同时按下按钮。

这里的想法是能够为每个小的拖动动作不断更新场景。

要在调用之间进行移动,您必须存储之前获得的值。哦,不要忘记将存储的值标记为无效,如果同时释放按钮。否则你会得到一些有趣的结果。

所以这里的一般想法

int old_x=0;
int old_y=0;
int valid=0;

void mouse_func (int button, int state, int x, int y) {
  old_x=x; 
  old_y=y;
  valid = state == GLUT_DOWN;
}

void motion_func (int x, int y) {
  if (valid) {
    int dx = old_x - x;
    int dy = old_y - y;
    /* do something with dx and dy */
  }
  old_x = x;
  old_y = y;
}

不要忘记将两个回调与glutMotionFuncand连接起来glutMouseFunc

于 2013-02-28T23:42:15.897 回答