我在cocos2d-x项目上工作并遇到困难。我想调用一个函数,延迟并再次调用相同的函数。我使用的是cocos2d-x 2.2.5。并为Android开发。
这是我到目前为止所得到的:
CCArray *arr = CCArray::create();
arr->addObject(pSprite);
arr->addObject(pGetal);
CCFiniteTimeAction *fun1 = CCCallFuncO::create(this, callfuncO_selector(GameLayer::animateFlip), arr);
CCDelayTime *delay = CCDelayTime::create(1.0);
pSprite->runAction(CCSequence::create(fun1, delay, fun1, NULL));
我想要调用的方法:
void GameLayer::animateFlip(CCObject *pSObj, CCObject *pGObj){
CCSprite *pSprite = (CCSprite *) pSObj;
CCLabelTTF *pGetal = (CCLabelTTF *) pSObj;
...
...
}
该函数在同一个类中,需要两个参数。我已经尝试将两个参数(CCSprite和CCLabelTTF)放在一个数组中,但它在运行时崩溃了...... 当我像这样调用函数时,不会发生错误:
this->animateFlip(sprite1, getal1);
任何人都有任何想法?
答案 0 :(得分:0)
感谢您的回答,我为Joachim建议的按钮创建了一个结构,其中包含精灵和标签。所有按钮都放在一个数组中。我还向它添加了animateFlip和showFlip函数。 AnimateFlip工作正常,我可以从游戏层为每个不变的按钮调用该函数。
void GameLayer::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
CCTouch *touch = (CCTouch *)pTouches->anyObject();
CCPoint location = touch->getLocationInView();
location = CCDirector::sharedDirector()->convertToGL(location);
for(int i = 0; i < 12; i++){
if(butArr[i].sprite->boundingBox().containsPoint(location)){
butArr[i].animateFlip();
break;
}
}
}
结构:
struct Button
{
cocos2d::CCSprite *sprite;
cocos2d::CCLabelTTF *getal;
int getalINT;
void showFlip();
void animateFlip();
};
但正如编程中的第一条规则告诉我们,一个问题得到解决,两个问题就会出现,我偶然发现了一个新问题:
void Button::showFlip()
{
CCFiniteTimeAction *fun1 = CCCallFunc::create(this, callfunc_selector(Button::animateFlip));
CCFiniteTimeAction *fun1 = CCCallFunc::create(this, callfunc_selector(Button::animateFlip));
CCDelayTime *delay = CCDelayTime::create(1.0f);
this->runAction(CCSequence::create(fun1, delay, fun2, NULL));
}
CCCallFunc :: create()请求一个上下文(我猜?),这通常是'this',但我的struct中的'this'指向Button。我怎样才能获得游戏玩家的背景?
再次感谢!