widget 调用runAction是使用下面的代码。
CCAction* UIWidget::runAction(CCAction *action)
{
return m_pRenderer->runAction(action);
}
那么,使用widget调用runAction后,回调函数里面的pSender其实是widget对应的render,而不是这个widget自身。
因为这个原因,我就遇到了这样的问题。
直接上代码:
UILoadingBar* lbBoss = xxx.getWidgetByName("");
int* test = new int(1);
CCCallFuncND * funcallLb =
CCCallFuncND::create(this, callfuncN_selector(SingleFight::callbackShowXuePercent),test );
void SingleFight::callbackShowXuePercent( CCNode* sender, void* data )
{
UILoadingBar* xueLb= (UILoadingBar*) sender;
//问题就出在这里,看起来是一个UILoadingBar在调用action,实际上是这个loadingBar封装的node在调用,这样执行后面的代码就会出问题。我们现在只能把loadingBar通过void* data传过去,这样太难看了。请问有什么好的解决方法没?
int* hurtPercent = (int*)data;
xueLb->setPercent(*hurtPercent );
}