coco2d-x有多个参数的调用函数?

时间:2014-07-31 12:30:28

标签: android c++ cocos2d-x

我在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);

任何人都有任何想法?

1 个答案:

答案 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。我怎样才能获得游戏玩家的背景?

再次感谢!