开发者社区> 涂作权> 正文

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

简介:  1 缓冲动作 man->setScale(0.8f); woman->setScale(0.8f); man->setPosition(ccp(100, 80)); woman->setPosition(ccp(100,240)); CCMoveTo
+关注继续查看


1 缓冲动作

man->setScale(0.8f);

woman->setScale(0.8f);

man->setPosition(ccp(100, 80));

woman->setPosition(ccp(100,240));

CCMoveTo * manTo = CCMoveTo::create(2, ccp(400,80));

CCMoveTo * womanTo = CCMoveTo::create(2, ccp(400, 240));

CCEaseExponentialIn *in = CCEaseExponentialIn::create(manTo);

CCEaseExponentialOut *out = CCEaseExponentialOut::create(manTo);

CCEaseExponentialInOut * inOut =

CCEaseExponentialInOut::create(manTo);

man->runAction(inOut);

woman->runAction(womanTo);

CCEaseElasticIn *in = CCEaseElasticIn::create(manTo);

CCEaseElasticOut *out = CCEaseElasticOut::create(manTo);

CCEaseElasticInOut * inOut = CCEaseElasticInOut::create(manTo);

#include "T13Action.h"

#include "AppMacros.h"

 

CCScene *T13Action::scene()

{

    CCScene * scene = CCScene::create();

    T13Action * layer = T13Action::create();

    scene->addChild(layer);

    return scene;

}

 

bool T13Action::init()

{

    TBack::init();

 

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

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

    man->setPosition(ccp(100, 160));

 

    CCMoveBy *by = CCMoveBy::create(2,ccp(300,0));

    CCMoveBy *by2 = CCMoveBy::create(2,ccp(300,0));

   

    CCEaseExponentialIn * in = CCEaseExponentialIn::create(by2);

    CCEaseExponentialInOut * out = CCEaseExponentialInOut::create(by2);

    CCEaseExponentialInOut * inOut = CCEaseExponentialInOut::create(by2);

 

//CCEaseElasticIn * in = CCEaseElasticIn::create(by2);

    //CCEaseElasticOut * out = CCEaseElasticOut::create(by2);

    //CCEaseElasticInOut * inOut = CCEaseElasticInOut::create(by2);

 

    //CCEaseBounceIn  *in = CCEaseBounceIn::create(by2);

    //CCEaseBounceOut * out = CCEaseBounceOut::create(by2);

    //CCEaseBounceInOut * inOut = CCEaseBounceInOut::create(by2);

 

    //看精灵的运行速度

    //man->runAction(in);

    //man->runAction(out);

    man->runAction(inOut);

 

    addChild(man);

    return true;

}

 

//原生绘图,每一帧都会绘图

void T13Action::draw()

{

    CCPointArray *array = CCPointArray::create(6);

   

    array->addControlPoint(ccp(100, 160));

    array->addControlPoint(ccp(200, 160));

    array->addControlPoint(ccp(200, 250));

    array->addControlPoint(ccp(300, 250));

    array->addControlPoint(ccp(300, 160));

    array->addControlPoint(ccp(450, 160));

 

    ccDrawCardinalSpline(array, 1, 100);

}

运行结果:

2 并行动作和序列动作

CCSequence 中持续时间为所有动作累计的总合,CCSequence 中不可以

CCRepeatForever 动作。

   CCSpwan中持续时间为并行动作持续时间最长的决定。

3 假动作

   CCCallFunc系列动作包括CCallFunc()CCCallFuncN()CCCallFuncND,以及CCCallFuncO四个动作,CCCallFunc系列动作的后缀”N”表示Node参数,指的是执行动作的对象,”D”表示Data参数,指的是用户自定义的数据,”O”表示对象,指的是一个用户自定义的CCObject参数。在不同的情况下,我们可以根据不同的需求来选择不同的CCCallFunc动作。

typedef void (CCObject::*SEL_CallFunc)();

//无参类型

typedef void (CCObject::*SEL_CallFuncN)(CCNode*);

//传递CCNode * 类型变量

typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);

//传递CCNode * 类型变量,和无类型变量

typedef void (CCObject::*SEL_CallFuncO)(CCObject*);

//传递CCObject *类型变量

#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)

#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)

#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)

#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)

CCCallFunc * func = CCCallFunc::create(this,

callfunc_selector(T13Action::funcCallBack));

CCCallFuncN * func = CCCallFuncN::create(this,

callfuncN_selector(T13Action::funcNCallBack));

CCCallFuncND * func = CCCallFuncND::create(this,

callfuncND_selector(T13Action::funcNDCallBack), (void *)"30");

CCArray * array = CCArray::create();

array->addObject(woman);

CCCallFuncO * func = CCCallFuncO::create(this,

callfuncO_selector(T13Action::funcOCallBack),(CCObject*)array);

CCSequence * seq = CCSequence::create(to, func, NULL);

man->runAction(seq);

addChild(man);

案例说明:

无参的假动作

void funcCallBack();

T13Action.h

#ifndef _T13Action_H__

#define _T13Action_H__

#include "cocos2d.h"

#include "TBack.h"

USING_NS_CC;

class T13Action :public TBack

{

public:

    static CCScene * scene();

    CREATE_FUNC(T13Action);

    bool init();

 

    void draw();

 

    //无参的假动作

    void funcCallBack();

    //带调用者的假动作

    void funcNCallBack(CCNode * node);

    //带有调用者和数据的假动作

    void funcNDCallBack(CCNode * node, void * data);

    //带有对象的假动作

    void funcOCallBack(CCObject * obj);

};

 

#endif

T13Action.cpp

#include "T13Action.h"

#include "AppMacros.h"

 

CCScene *T13Action::scene()

{

    CCScene * scene = CCScene::create();

    T13Action * layer = T13Action::create();

    scene->addChild(layer);

    return scene;

}

 

bool T13Action::init()

{

    TBack::init();

 

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

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

    man->setPosition(ccp(100, 160));

 

    CCMoveBy *by2 = CCMoveBy::create(2, ccp(300, 0));

    //假动作就是当一个动作执行完了之后又执行的一个动作

    CCCallFunc * func = CCCallFunc::create(this,callfunc_selector(T13Action::funcCallBack));

    CCSequence * seq = CCSequence::create(by2, func, NULL);

 

    man->runAction(seq);

    addChild(man);

    return true;

}

 

//原生绘图,每一帧都会绘图

void T13Action::draw()

{

    CCPointArray *array = CCPointArray::create(6);

   

    array->addControlPoint(ccp(100, 160));

    array->addControlPoint(ccp(200, 160));

    array->addControlPoint(ccp(200, 250));

    array->addControlPoint(ccp(300, 250));

    array->addControlPoint(ccp(300, 160));

    array->addControlPoint(ccp(450, 160));

 

    ccDrawCardinalSpline(array, 1, 100);

}

 

//无参的假动作

void T13Action::funcCallBack() {

    CCLog("action is over");

}

运行结果(运行速度是变速的):

输出结果:

4 假动作

#ifndef _T13Action_H__

#define _T13Action_H__

#include "cocos2d.h"

#include "TBack.h"

USING_NS_CC;

class T13Action :public TBack

{

public:

    static CCScene * scene();

    CREATE_FUNC(T13Action);

    bool init();

 

    //无参的假动作

    void funcCallBack();

    //带调用者的假动作

    void funcNCallBack(CCNode * node);

    //带有调用者和数据的假动作

    void funcNDCallBack(CCNode * node, void * data);

    //带有对象的假动作

    void funcOCallBack(CCObject * obj);

};

#endif

#include "T13Action.h"

#include "AppMacros.h"

 

CCScene *T13Action::scene()

{

    CCScene * scene = CCScene::create();

    T13Action * layer = T13Action::create();

    scene->addChild(layer);

    return scene;

}

 

bool T13Action::init()

{

    TBack::init();

 

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

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

    man->setPosition(ccp(50, 160));

    woman->setPosition(ccp(50,260));

 

 

    //创建一个CCArray,在使用前调用retain(),要注意的是在最后退出之

    //后要在onExit()中将array进行release()

    CCArray * array = CCArray::create();

    array->retain();

    array->addObject(woman);

 

    CCMoveBy *by2 = CCMoveBy::create(2, ccp(300, 0));

    CCCallFuncN * funcN = CCCallFuncN::create(this,

        callfuncN_selector(T13Action::funcNCallBack));

 

    //调用

    CCCallFuncND *funcND = CCCallFuncND::create(this,

        callfuncND_selector(T13Action::funcNDCallBack),

        (void*)"30");

    CCCallFuncO  * funcO = CCCallFuncO::create(this,

        callfuncO_selector(T13Action::funcOCallBack),

        array);

 

    CCSequence * seq = CCSequence::create(by2, funcO, NULL);

 

    man->runAction(seq);

    addChild(man);

    return true;

}

 

//其中CCNode表示的是动作的执行者

void T13Action::funcNCallBack(CCNode *node)

{

    CCSprite *spr = (CCSprite *)node;

    //将精灵从屏幕上

    //spr->removeFromParentAndCleanup(true);

    CCJumpBy * by = CCJumpBy::create(2, ccp(0,0),100,1);

    spr->runAction(by);

}

 

void T13Action::funcNDCallBack(CCNode * node, void * data)

{

    CCSprite *spr = (CCSprite *)node;

    //下面是取出数据的代码

    CCString * str = CCString::createWithFormat("%s", (char*)data);

    //给精灵旋转

    spr->setRotation(str->floatValue());

}

 

void  T13Action::funcOCallBack(CCObject * obj)

{

    CCArray * array = (CCArray*)obj;

    //array中取出第0个元素

    CCSprite * spr = (CCSprite*)array->objectAtIndex(0);

    addChild(spr);

}

 

 

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
vb UBound 数据上界
引用:http://www.bhcode.net/article/20100317/7384.html 返回一个 Long 型数据,其值为指定的数组维可用的最大下标。 语法 UBound(arrayname[, dimension]) UBound 函数的语法包含下面部分: 部分 描述 arrayname 必需的。
738 0
数据同步框架MS Sync Framework - IDE快速开发支持Local Database Cache
数据同步框架MS Sync Framework [术语、例子、参考资料、Tips] http://www.cnblogs.com/2018/archive/2011/02/22/1961654.html  数据同步框架MS Sync Framework-不同场景使用例子和简要分析 http://www.cnblogs.com/2018/archive/2011/02/23/1961657.html 以上两篇文章对框架的基础有了描述,通过IDE的提供Local Database Cache可以快速的实现一个常用的同步应用。
797 0
2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO
 1 缓冲动作 man->setScale(0.8f); woman->setScale(0.8f); man->setPosition(ccp(100, 80)); woman->setPosition(ccp(100,240)); CCMoveTo
977 0
数据结构(二):二叉搜索树(Binary Search Tree)
二分法猜数字的游戏应该每个人都知道,通过对猜测数字“大了”、“小了”的情况判断,来猜出最终的数字。序列范围为 的集合,复杂度为 ,即最多需要 次可以猜到最终数字。
960 0
《数据分析实战 基于EXCEL和SPSS系列工具的实践》一第2章 数据分析的理论、工具、模型
记得在我上研究生的时候,曾经有一位老师问我,什么是足球的“越位”?我很奇怪他为什么问这个问题,他说看世界杯转播老是在说越位,但他不知道啥意思。而我上大学的时候特别喜欢踢球,大学毕业之后也经常踢球,所以“越位”对我来说再简单不过了,只是没想到一位智力超群、知识渊博的大学老师却并不知晓,所以这件事给我留下了深刻的印象。
2032 0
+关注
涂作权
java,架构,编程语言相关专家
1234
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载