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)));
}

效果图:

cocos2d-x 之 CCCallFunc CCCallFuncN CCCallFuncND

时间: 05-07

cocos2d-x 之 CCCallFunc CCCallFuncN CCCallFuncND的相关文章

CCCallFunc CCCallFuncN CCCallFuncND的区别和使用

CCCallFunc CCCallFuncN CCCallFuncND都用来创建带有回调函数的动作,区别主要在于回调函数是否带有参数 CCCallFunc是执行对应的回调函数,其中回调函数不可带参数.一般使用静态成员函数create创建实例,create声明如下: static CCCallFunc* create ( CCObject * pSelectorTarget, SEL_CallFunc selector ) 回调函数通过execute方法执行,CCCallFunc中的execute

Cocos2dx 中的CCCallFunc,CCCallFuncN,CCCallFuncND,CCCallFuncO比较

首先看一张图片,表示了CCCallFunc的继承关系: 1.CCCallFunc,回调,调用不带参数的函数: 2.CCCallFuncO,回调,O表示CCObject,CCCallFunco可以带CCObject参数的函数 3.CCCallFuncN,回调,N表示CCNode,表示可以传递Node*类型 4.CCCallFuncND,回调,ND表示CCNode和Data,可以传递对象本身和一个void*类型参数,void*表示可以是任意类型的参数 CCCallFunc CCCallFuncN C

动作展示《一》

由于Cocos2d-X中的动作较多,我将所有的动作制作成了一个滚动视图,每个滚动视图上都有动作名,单击滚动视图就可以展示相应的动作 程序效果图: 使用滚动视图实现动作切换 动作展示 程序代码: 首先创建一个ActionShow类 在ActionShow.h中的代码 #ifndef _ActionShow_H_ #define _ActionShow_H_ #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC;

Cocos2D-Android-1之源码详解:3.ActionsTest

package org.cocos2d.tests; import java.io.IOException; import java.io.InputStream; import javax.microedition.khronos.opengles.GL10; import org.cocos2d.actions.base.CCAction; import org.cocos2d.actions.base.CCFollow; import org.cocos2d.actions.base.CC

Cocos2d-x游戏开发技术精解读书摘要(2016-5-27 10:52)

 Cocos2d-x游戏开发技术精解 刘剑卓 著 2013年6月第1版 chap2 Cocos2d-x引擎的开发环境 2.1跨平台的开发 2.2建立开发环境 2.2.1 PC开发环境 2.2.2 Android开发环境 2.2.3 iOS开发环境 2.3引擎中的混合编译 2.3.1 Java与C++的混合编译 2.3.2 Objective-C与C++的混合编译 2.4引擎的起点 2.4.1应用程序入口 2.4.2引擎应用入口 2.5丰富的示例程序 2.5.1 TestCpp示例项目 2.5

Cocos2d-x学习笔记(十)scheduler及Cocos2dx的回调

原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38893795 前言 看完了前九节的学习笔记,我们已经基本上可以做一些简单的界面了,但是如果我们想要让东西不断动起来怎么办呢?答案很简单,用scheduler,我们先来看看schedule的用法吧. scheduler用法 在之前CCNode的学习中,我们介绍了部分schedule的方法,现在我们来回顾一下: // 返回指定计划是否正在执行 bool isSchedul

Cocos2D-Android-1之源码详解:2.ActionManagerTest

//现在我们开始注释,他的第一个activity package org.cocos2d.tests; import org.cocos2d.actions.CCActionManager; import org.cocos2d.actions.base.CCAction; import org.cocos2d.actions.instant.CCCallFunc; import org.cocos2d.actions.instant.CCCallFuncN; import org.cocos2

2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO

 1 缓冲动作 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fil

cocos2d-x 2.2 study ------------------------ CCCallFunC家族

CCCallFunC家族 当我们需要在一个动作序列中某一个动作执行结束之后,调用某个函数用于执行一个任务的时候,我们可以使用CCCallFunC家族函数.CCCallFunC是CCActionInstant类的子类.值得注意的是,虽然CCCallFunC家族函数是瞬时动作函数的子类,但是所谓的瞬时,也只是指函数调用的一瞬间,而关于函数内部怎么执行,耗用多久,则完全与瞬时没有任何关系.CCCallFunC家族函数可以将函数调用的过程封装成一个动作类,从而放入动作序列中以供我们调用. HelloWo