gpt4 book ai didi

c++ - 在 Cocos2d-X 中使用 callfuncND_selector 创建回调

转载 作者:行者123 更新时间:2023-11-28 07:15:11 26 4
gpt4 key购买 nike

我目前正在使用 Cocos2dx 设计游戏。我希望使用 callfuncND_selector 函数为我的游戏开发一个带有回调的 API。我想要类似于将函数作为指针的 HTTPRequest 函数 setCallBackFunction 的东西

request->setResponseCallback(this,callfuncND_selector(MenuLayer::onHttpRequestCompleted)); 

谁能告诉我该怎么做?喜欢充实功能定义来帮助我吗?我是 c++ 的新手,非常感谢任何帮助。

亲切的问候

最佳答案

我想你是在问如何声明这样一个函数?

一个例子,如果你确定目标回调选择器保留在内存中,就像这样:

在你的 hpp 中:

class YourRequestClass 
{
// ...

protected:
CCCallFuncND* stored_cb ;

void executeStoredCallback() ;
void releaseCallback() ;

public:
void setResponseCallback( CCCallFuncND* cb ) ;

// ...
}

在你的 cpp 中:

void  YourRequestClass::setResponseCallback( CCCallFuncND* cb )
{
// store cb for later use. You have to retain it for it to stick around.
if ( cb )
{
cb->retain() ;
stored_cb = cb ;
}
}

void YourRequestClass::executeStoredCallback()
{
if ( stored_cb ) stored_cb->execute() ;
}

void YourRequestClass::releaseCallback()
{
if ( stored_cb ) { stored_cb->release() ; stored_cb = NULL ; }
}

要从您的“请求”实例调用您的函数,并且“this”是回调方法的所有者实例:

request->setResponseCallback( cocos2d::CCCallFuncND::create( this, (cocos2d::SEL_CallFuncND) &yourcbclassname::your_cb_method, (void*)ptr_to_some_data ) ) ;

这向您展示了如何声明 cocos2d cb 参数。重要的警告是,如果不能保证 cb 对象实例保留在内存中,则此方法不适合,否则您最终会玩悬空指针。

如果您的目标是通用 API 而不是特定项目的特定案例,您将需要另一种方法来处理保留(例如,smartptr 和您自己的仿函数系统)。

希望这对您有所帮助。

关于c++ - 在 Cocos2d-X 中使用 callfuncND_selector 创建回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20348835/

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