gpt4 book ai didi

c++ - glfwSetCursorPosCallback 在另一个类中运行

转载 作者:行者123 更新时间:2023-11-28 00:17:28 24 4
gpt4 key购买 nike

我真的卡住了:

我有主窗口,在主游戏循环中我这样做:

// 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com