Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > OpenGL перемещение элемента мышью. Затупил...


Автор: DoctorSwat 4.9.2013, 17:09
Занимаюсь разработкой интерфейса для моих опенгл приложений. Сейчас сделал кнопки и окошки. С окошками встала такая проблема:
Само окно я нарисовал, сделал подсветку, тени, выделение, а сейчас нужно перемещать это окно мышкой за верхнюю часть.
Я беру координаты мышки, перевожу их в координаты сцены, определяю пересечение с нужной мне частью, а дальше засел. Нужно после всего это при нажатой и двигающийся левой кнопки мыши сдвигать окно туда, куда двигается мышка, то есть  перетаскивать его. Раньше с мышкой я не работал поэтому жду помощи.

Использую глут чтобы контролить мышку.
Вот код: 
Код

void MousePressed(int button,int state,int x,int y)
{   
      gui.setmouse(x,y);  
      //cout<<gui.ctransx(x)<<" "<<gui.ctransy(y)<<endl;
    if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
    {
      win.setbutstate(true);
        glutPostRedisplay();
      if(bb.collision()){cout<<"b1"<<endl;}
      if(bb2.collision()){cout<<"b2"<<endl;}
      if(win.tbcollision()){cout<<"tb"<<endl;}

    }
    else{win.setbutstate(false);}



}


void MousePressedMove(int ax,int ay)
{  
  gui.setmouse(ax,ay);  
  cout<<"move"<<endl;

    if(win.tbcollision() && win.getbutstate())
    {
    win.winmove(ax,ay);
    win.setwinmoveold();
    glutPostRedisplay();
    }


}


void MouseMove(int x,int y)
{  
        gui.setmouse(x,y);  
    if(win.collision()){win.winfocus(true);}
    else{win.winfocus(false);}    
    if(win.tbcollision()){win.tbfocus(true);}
    else{win.tbfocus(false);}
    if(bb.collision()){bb.focus(true);}
    else{bb.focus(false);}
    if(bb2.collision()){bb2.focus(true);}
    else{bb2.focus(false);}
}


Этот код работает и окно двигается, но рывками. Надеюсь на помощь)

Автор: DoctorSwat 5.9.2013, 19:18
Ап. Ребят ну любые идеи.

Автор: DoctorSwat 5.9.2013, 21:23
Итак, решил я проблему с перемещением. Просто надо плавно двигать окно. Но теперь такой вопрос: после перемещения окно остаётся на месте и если его опять начать двигать то оно возвращается в начальную точку. Знаю, что надо сохранять координаты, я их вроде сохраняю, но видно плохо. Надеюсь на ответы. 

Автор: Bitter 5.9.2013, 22:06
А какие вы ждете ответы? Ну вот вам ответ

Автор: tzirechnoy 7.9.2013, 23:10
Первая идея: когда спрашываете об ошыбках -- демонстрируйте какой-нибудь работающий код, в котором есть интересующая Вас ошыбка.

А вообще -- http://segfault.kiev.ua/smart-questions-ru.html

Автор: DoctorSwat 8.9.2013, 12:54
tzirechnoy, Вобще не понял о чём ты говоришь, либо пиши правильно, либо разборчиво, а лучше сразу и разборчиво, и правильно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)