前言
上次我们已经显示出了我们的按钮,其实就是一个图片,这次,我们要让其成为真正的按钮。
正题
这次主要就是编写响应函数,这样就有了按钮的功能了,我们就借着上次图片,写一个鼠标经过的效果。要编写moveon回调函数,这里有个地方要格外注意。
void GameWindow::SetCallBack()
{
typedef void(*fptr_movecallback)(GLFWwindow* window, double xpos, double ypos);
//typedef void(*fptr_buttoncallback)(GLFWwindow* window, int button, int action, int mods);
//鼠标位置回调
glfwSetCursorPosCallback(window,fptr_movecallback(&GameWindow::mouse_movecallback));
//鼠标按键回调
//glfwSetMouseButtonCallback(window,fptr_buttoncallback(&GameWindow::mouse_buttoncallback));
}
这个回调函数我用的是类中的成员函数,我的GLButton也是在类中声明的,一旦出发这个回调函数的时候就会出错,我觉得原因就是此时类成员函数直接用指针调用,已经失去了特定对象的数据环境,这时候如果函数中有使用局部变量的话就会出现越界错误,所以按钮我暂时声明成了全局变量,这个不用担心,以后会有别的方法解决按钮是否为全局变量这个问题。
然后就是编写响应函数,这个就比较容易了,我让控制台可以显示坐标,并且使得按钮变换颜色。
void GameWindow::mouse_movecallback(GLFWwindow*window ,double xpos,double ypos)
{
GLSTD_TOOLS::cursor_x = xpos;
GLSTD_TOOLS::cursor_y = ypos;
if(button_test->isMouseMoveOn())
{
cout<<xpos<<" "<<ypos<<endl;
button_test->setCover(1);
}
else
{
button_test->setCover(0);
}
}
这个就是按钮功能的实现。看一下效果。
源码