我目前正在使用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/