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

CCCallFunC家族

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

HelloWorldScene.h如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#include "cocos2d.h"

class HelloWorld : public cocos2d::CCLayerColor

{

public:

    // Method ‘init‘ in cocos2d-x returns bool, instead of ‘id‘ in cocos2d-iphone (an object pointer)

    virtual bool init();

    // there‘s no ‘id‘ in cpp, so we recommend to return the class instance pointer

    static cocos2d::CCScene* scene();

                                                                         

    //先声明四个动作的回调方发

    void callBack();

    void callNodeBack(CCNode* sender);

    void callNodeBack(cocos2d::CCNode *sender, void * data);

    void callObjectBack( CCObject * data);

    // preprocessor macro for "static create()" constructor ( node() deprecated )

    CREATE_FUNC(HelloWorld);

};

#endif // __HELLOWORLD_SCENE_H__

HelloWorldScene.cpp文件中的

boolHelloWorld::init()函数中加入如下代码:


1

2

3

4

5

6

7

8

9

10

11

if ( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)) )

   {

       return false;

   }

                                                           

   //CCCallFunc家族函数:当我们需要在一个动作完成之后需要调用某个函数时使用

                                                           

   CCSprite* player = CCSprite::create("Icon.png");

   player->setPosition(ccp(100, 100));

   this->addChild(player);

   CCMoveTo* action = CCMoveTo::create(1, ccp(200, 200));


1

2

3

4

5

//CCCallFunc的功能非常简单,它只能简单地实现在动作序列中帮助我们调用一个函数的功能。

   CCCallFunc* call  = CCCallFunc::create(this, callfunc_selector(HelloWorld::callBack));

   //下面这行代码是创建一个动作序列

   CCFiniteTimeAction* seq = CCSequence::create(action,call,NULL);

   player->runAction(seq);


1

2

3

4

5

//CCCallFunc的回调函数

void HelloWorld::callBack()

{

    CCLog("CCCallFunc");

}


1

2

3

4

//CCCallFuncN  既能够调用一个方法还能够将调用的对象传过去  这里的调用对象就是player  它是个精灵对象

    CCCallFuncN* callN = CCCallFuncN::create(this, callfuncN_selector(HelloWorld::callNodeBack));

    CCFiniteTimeAction* seq2 = CCSequence::create(action,callN,NULL);

    player->runAction(seq2);


1

2

3

4

5

6

//CCCallFuncN的回调函数

void HelloWorld::callNodeBack(cocos2d::CCNode *sender)

{

    CCSprite* player = (CCSprite*) sender;

    CCLog("%f",player->getPosition().x);

}


1

2

3

4

5

6

7

8

9

//先创建一个字典

    CCDictionary* dic = CCDictionary::create();

    dic->retain();

    dic->setObject(CCString::create("zxcc"), 1);

                              

    //CCCallFuncND可以传递一个任意数据类型  例如,我们可以传递一个字典

    CCCallFuncND* callND = CCCallFuncND::create(this, callfuncND_selector(HelloWorld::callNodeBack),(void*)dic);

    CCFiniteTimeAction* seq3 = CCSequence::create(action,callND,NULL);

    player->runAction(seq3);


1

2

3

4

5

6

7

8

//CCCallFuncND的回调函数

void HelloWorld::callNodeBack(cocos2d::CCNode *sender, void * data)

{

    CCDictionary* dic = (CCDictionary*)data;

    CCString* str = (CCString*)(dic->objectForKey(1));

                          

      CCLog("%s",str->getCString());

}


1

2

3

4

5

6

7

8

9

//我们创建一个精灵

    CCSprite* player2 = CCSprite::create("player2.png");

    player2->setPosition(ccp(300, 300));

    this->addChild(player2);

    //在例子中我先移动一个精灵 ,再移动另一个精灵

   // CCCallFuncND传值的类型只能为CCObject类型

    CCCallFuncO* callO = CCCallFuncO::create(this, callfuncO_selector(HelloWorld::callObjectBack), player2);

    CCFiniteTimeAction* seq4 = CCSequence::create(action,callO,NULL);

    player->runAction(seq4);


1

2

3

4

5

6

7

8

//CCCallFuncO的回调方法

void HelloWorld::callObjectBack(cocos2d::CCObject *data)

{

    CCSprite* player = (CCSprite*)data;

              

    player->runAction(CCMoveTo::create(1, ccp(1 ,90)));

            

}

代码例子: http://pan.baidu.com/share/link?shareid=611826954&uk=3189484501

原文链接:http://7097095.blog.51cto.com/7087095/1228526

时间: 2024-10-25 10:10:27

cocos2d-x 2.2 study ------------------------ CCCallFunC家族的相关文章

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

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

cocos2d tiledmap

#include "HelloWorldScene.h" USING_NS_CC; CCScene* HelloWorld::scene() { CCScene *scene = CCScene::create(); HelloWorld *layer = HelloWorld::create(); scene->addChild(layer); return scene; } bool HelloWorld::init() { if ( !CCLayer::init() ) {

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

Oracle Study之案例--数据恢复神器Flashback(1)

Oracle Study之案例--数据恢复神器Flashback(1) Flashback: Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数.要使用flashback 的特性,必须启用自动撤销管理表空间. 在Oracle 11g里又出了一个新特性:Oracle Flashback Data Archive. FDA通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪

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->

iOS cocos2d游戏引擎的了解之一

ios游戏引擎之Cocos2d(一) cocos2d是一个免费开源的ios游戏开发引擎,并且完全采用object-c进行编写,这对于已经用惯object-c进行ios应用开发的童鞋来说非常容易上手.这些也是我推荐使用cocos2d进行ios游戏开发的原因,当然从字面上已经可以开出来,这是一款专注于"2d"游戏的开发引擎,您也可以自己编写3d渲染代码或者使用第三方的解决方案,在cocos2d里加载显示3d模型.此外对于3d,也可以选用cocos3d来进行游戏开发.好了,废话不多说,还是先

Java集合四大家族的故事(四)——Map家族的LinkedHashMap

每个家族都有一个最基本且最常用的数据类型:比如List系列的ArrayList,Map系列的HashMap,并且,它们的本质都是数组存储结构.相似的是,每个家族都有一个Linked开头的类,如List家族的LinkedList和Map家族的LinkedHashMap,这两个类的存储的数据结构又都是双向链表(其实是连续数组添加了两个方向的指针,所以既能与数组兼容,又能够有双向链表的性质).而引入双向链表功能的目的就是为了能够有序遍历. 今天,我们就来介绍LinkedHashMap. 扩展HashM

cocos2d::Vector

v3.0 beta加入 定义在"COCOS2DX_ROOT/cocos/base"的"CCVector.h"头文件中. template<class T>class CC_DLL Vector; cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器. cocos2d::Vector<T>中的元素是按序存取的,它的低层实现数据结构是标准模版库中的标准顺序容器std::vector. 在Cocos2d-x v3.

SHELL STUDY....tr的用法

一般我们使用tr来做字符串的替换,或者删除指定的字符串 tr的语法如下: tr [OPTION]... SET1 [SET2] -c, -C, --complement first complement SET1 将非SET1中的字符替换为SET2 [[email protected] ~]$ echo "lubinsu" | tr -c "l" "A" lAAAAAAA -d, --delete delete characters in SET