У меня есть объект, который я хочу переместить. Я хочу, чтобы он двигался, только если я нажму внутри, затем перетащу мышь в нужное место, а затем после отпускания он начнет двигаться к нему. поэтому, если я щелкну внутри него, я могу перемещать мышь куда угодно, удерживая кнопку мыши, но только когда я отпускаю, она начинает двигаться.
В настоящее время лучшее, что я смог сделать, это заставить объект следовать (кстати, на пару секунд позади, а НЕ в позиции мыши), пока я удерживаю кнопку мыши и перемещаю ее. не имеет значения, откуда я начинаю щелчок, пока я щелкаю и двигаюсь, объект движется к нему, пока я удерживаю кнопку мыши. любые другие попытки оставляют объект неподвижным / вообще не движущимся.
void mousemotion(int x, int yc){
globals.mouse_x = x;
globals.mouse_y = HEIGHT - yc;
}
и
int main(int argc, char** argv){
glutInit(&argc, argv);
....
//glutMouseFunc(processMouse);
glutMotionFunc(mousemotion);
являются единственными функциями/обратными вызовами мыши, которые в настоящее время используются для получения вышеуказанного результата. Я пробовал такие вещи, как добавление обратного вызова glutMouseFunc, но изменение параметра state в нем дает плохие результаты. НАПРИМЕР:
//glutMouseFunc callback
void processMouse(int button, int state, int x, int yc){
if ( state == GLUT_UP){
globals.centre_x = globals.mouse_x;
globals.centre_y = globals.mouse_y;
}
GLUT_DOWN не меняет основное поведение, но когда объект находится в движении, и я просто нажимаю один раз, объект привязывается к положению, в котором он собирался. GLUT_UP просто делает так, что как только я отпущу мышь, объект сразу же привяжется к тому положению, в котором он находился. Такое поведение имеет смысл, поскольку они ведут себя так, как они есть, но я не могу манипулировать им, чтобы оно работало так, как я хочу. Я также сделал функцию, чтобы проверить, находится ли точка внутри объекта, но я не знаю, где это применимо.
bool inside(int x, int y){
if(x >= globals.centre_x - 20
&& x <= globals.centre_x +20
&& y >= globals.centre_y - 20
&& y <= globals.centre_y+ 20){
return true;
}
else
return false;
}
возможно, он будет использоваться внутри одной из функций мыши, используя координаты мыши x и y в качестве параметров.
все примеры перетаскивания, которые я видел в Интернете, включают немедленное перетаскивание объекта, т. е. щелчок по объекту, и объект следует точным координатам мыши x, y при его перемещении, но я хочу сделать это только тогда, когда я отпускаю кнопку мыши объект начнет двигаться.
Любая помощь приветствуется. дайте мне знать, если я могу что-то уточнить. спасибо