cocos2d-x 之 CCCallFunc CCCallFuncN CCCallFuncND

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"

using namespace cocos2d;
using namespace CocosDenshion;

CCScene* HelloWorld::scene()
{
    CCScene *scene = CCScene::create();
    HelloWorld *layer = HelloWorld::create();
    scene->addChild(layer);
    return scene;
}
bool HelloWorld::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }
    CCSize size = CCDirector::sharedDirector()->getWinSize();

    //CCCallFunc 调用的方法不包含参
    CCSprite* callFuncSp = CCSprite::create("Icon.png");
    callFuncSp->setPosition(ccp(size.width/4, size.height*0.5));
    this->addChild(callFuncSp);
    callFuncSp->runAction(CCCallFunc::create(this, callfunc_selector(HelloWorld::callback1)));
    
    //CCCallFuncN 调用的方法包含一个CCNode*类型的参数,表示执行动作的对象。
    CCSprite* callFuncNSp = CCSprite::create("Icon.png");
    callFuncNSp->setPosition(ccp(size.width/2, size.height*0.5));
    this->addChild(callFuncNSp);
    callFuncNSp->runAction(CCCallFuncN::create(this, callfuncN_selector(HelloWorld::callback2)));
    
    //CCCallFuncND,回调,ND表示CCNode和Data,可以传递对象本身和一个void*类型参数,void*表示可以是任意类型的参数
    CCLabelTTF* title = CCLabelTTF::create("void* 要传的参数", "Marker Felt", 16); //自定义一个CCLabelTTF
    title->setPosition(ccp(size.width/4*3, size.height*0.6));
    this->addChild(title);
    
    CCSprite* callFuncNDSp = CCSprite::create("Icon.png");
    callFuncNDSp->setPosition(ccp(size.width/4*3, size.height*0.5));
    this->addChild(callFuncNDSp);
    callFuncNDSp->runAction(CCCallFuncND::create(this, callfuncND_selector(HelloWorld::callback3), (void*)title));
    

    return true;
}

void HelloWorld::callback1()
{
    CCSize s = CCDirector::sharedDirector()->getWinSize();
    CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16);
    label->setPosition(ccp( s.width/4*1,s.height/3));
    addChild(label);
}

//CCNode* sender为运行动作的它本身也就是CCSprite* callFuncNSp
void HelloWorld::callback2(CCNode* sender)
{
    CCSize s = CCDirector::sharedDirector()->getWinSize();
    CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16);
    label->setPosition(ccp( s.width/4*2,s.height/3));
    addChild(label);
    
    //自身做顺时针旋转动作
    sender->runAction(CCRepeatForever::create(CCRotateBy::create(1, 360)));
}

//CCNode* sender也就是CCSprite* callFuncNDSp. void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。
void HelloWorld::callback3(CCNode* sender, void* data)
{
    CCSize s = CCDirector::sharedDirector()->getWinSize();
    CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16);
    label->setPosition(ccp( s.width/4*3,s.height/3));
    addChild(label);
    
    //自身做逆时针旋转动作
    sender->runAction(CCRepeatForever::create(CCRotateBy::create(1, -360)));
    
    //void* data也就是CCLabelTTF* title
    CCLabelTTF* title = (CCLabelTTF*)data;
    title->runAction(CCRepeatForever::create(CCJumpBy::create(1, ccp(0, 0), 30, 2)));
}

效果图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值