我程序中的UI系统目前的工作原理是将void(*)()
类型的函数指针分配给触发元素(屏幕上的四边形,键盘上的键)以及可指定的调用条件,它将与每个帧的键的实际条件(使用GLFW),鼠标按钮或光标进行比较,以确定是否应该调用回调函数。
密钥的条件可以是KeyCondition(PRESS, LEFT_SHIFT)
,如果在按住左移的同时按下键,则会调用绑定到键的回调。
我的问题是我只能分配void(*)()
类型的这些按钮功能,这会禁止我将参数传递给按钮回调。
例如,如果我想在光标悬停在按钮上时点亮一个按钮,我就必须创建一个指定的函数void highlightButtonA()
,它在内部将按钮A
的颜色设置为更高的值,而我当然更能够将回调设置为类似void offsetColor(unsigned int buttonIndex, float r, float g, float b, float a)
的内容,并将各个参数传递给每个回调。
有没有办法做到这一点?是否有一些函数指针可以指向任何形状的函数并以某种方式存储参数?我应该担心这些解决方案的性能有多大?我的程序必须能够每秒处理多次按键/按键并且仍然稳定,因为它是一款快节奏的射击游戏。
答案 0 :(得分:2)
你可以使用衰减函数指针的非捕获lambda,如下所示:
button.OnMouseHover([]{ offsetColour(buttonIndex, r, g, b, a); });
请记住,buttonIndex
和offsetColour
的其他args应该是文字,因为lambda无法从封闭范围中捕获变量。