作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的卡住了:
我有主窗口,在主游戏循环中我这样做:
// poll for input
glfwPollEvents();
this->controls->handleInput(window, world->getPlayer());
glfwSetCursorPosCallback(window, controls->handleMouse);
我想做的是让一个类负责控件并让这个类也处理鼠标。
我总是得到:
'Controls::handleMouse': function call missing argument list; use '&Controls::handleMouse' to create a pointer to member
现在,当我尝试这个时,我得到:
'GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow *,GLFWcursorposfun)' : cannot convert argument 2 from 'void (__thiscall Controls::* )(GLFWwindow *,double,double)' to 'GLFWcursorposfun'
不确定我在这里做错了什么,因为 GLFWcursorposfun 只是一个带有 GLFWwindow 和两个 double 的 typedef。
由于该函数在另一个类中,我尝试为其创建一个原型(prototype),例如:
class Controls {
void handleInput(GLFWwindow *window, object *gameObject);
void handleMouse(GLFWwindow *window, double mouseXPos, double mouseYPos);
};
但无济于事。
编辑:当然,如果我将函数设为静态,我可以将它设置为 &Controls::handleMouse,但我更希望能够创建多个控件对象,它们具有不同的相机和它们操纵的游戏对象。
另外,如何获取正确的相机/游戏对象数据呢?
最佳答案
您不能将类的成员函数作为函数传递。 glfwSetCursorPosCallback
它期待一个函数并抛出错误,因为它获得了一个成员函数。
换句话说,您希望提供一个全局函数并将其传递给 glfwSetCursorPosCallback
。
如果您确实希望控件对象获得光标位置回调,您可以将控件实例存储在全局变量中并将回调传递给该实例。像这样:
static Controls* g_controls;
void mousePosWrapper( double x, double y )
{
if ( g_controls )
{
g_controls->handleMouse( x, y );
}
}
然后当你调用glfwSetCursorPosCallback
时你可以传递mousePosWrapper
函数:
glfwSetCursorPosCallback( window, mousePosWrapper );
关于c++ - glfwSetCursorPosCallback 在另一个类中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29356783/
我真的卡住了: 我有主窗口,在主游戏循环中我这样做: // poll for input glfwPollEvents(); this->controls->handleInput(window, w
我是一名优秀的程序员,十分优秀!