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

}

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

  1. oracle设置缓存大小设置多少,【数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※】...

    [数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※]     Oracle 9i引入了一个新的途径来预测数据缓冲cache中附加数据缓存的所带来的好处的多少.V$DB_CACHE_A ...

  2. 嵌入式平台音频播放器设计(数据缓冲)

    一.目的 在之前的博文中我们分析过播放器整体的软件框架,本文在其基础上继续探讨数据缓冲机制. 二.设计 在播放设计中,我们需要考虑两类数据的调度管理,一类是事件类的管理,一类是音频数据的管理. 例如在 ...

  3. 数据缓冲策略 —— 无缓冲、行缓冲、全缓冲(缓冲区大小测试)

    printf打印数据时,一般会先把数据放入C缓冲区,然后再刷新到内核缓冲区,最后再写入硬件 这个过程中,数据从C缓冲区迁移到内核缓冲区的操作我们称为缓冲(也可以理解为刷新) 下面我们将介绍 缓冲策略的 ...

  4. 包装类(Integer、Long...)中的数据缓冲

       面试时经常被问到Integer i=127和Integer j=127的区别?    java 1.5 的自动装箱拆箱机制是编译特性还是虚拟机运行时特性?分别是怎么实现的?    本文章以Int ...

  5. DIV遮罩层--数据缓冲效果的实现

    这个非本人所写,拿的网上的自己改了下 JS代码: View Code function sAlert(str) {var msgw, msgh, bordercolor;msgw = 300;//提示 ...

  6. (转)关于数据库主键和外键(终于弄懂啦)

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  7. 小议数据库主键选取策略

    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一 行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更 ...

  8. UDP分两次接收数据包 MSG_PEEK

    问题: 今天在测试e_link协议时,使用SOCK_DGRAM UDP连接服务器,由于协议由定长头部,加数据组成,且头部中包含了数据的长度,因此设计时分两次进行接收. 先接收头部,解析出数据长度,再次 ...

  9. 创业公司做数据分析(三)用户行为数据采集系统 (转)

    http://blog.csdn.net/zwgdft/article/details/53542597 作为系列文章的第三篇,本文将重点探讨数据采集层中的用户行为数据采集系统.这里的用户行为,指的是 ...

最新文章

  1. CSS之布局(盒模型)
  2. cuda runtime error (59) : device-side assert triggered when running transfer_learning_
  3. 使用gulp和vsc构建高效的typescript开发环境
  4. LDR指令和LDR伪指令区别
  5. 怎么把matlab 训练的model 保存下来 然后在opencv 中调用
  6. 如何用VB制作DLL文件
  7. 征集大家的网站如何防范DDOS攻击解决方案
  8. 三星note9刷Android9,【极光ROM】-【三星NOTE9 N960X-9810】-【V21.0 Android-Q-THB】
  9. 蓝牙 - 注册SIG账号
  10. 值得一看的Spring实战 (第5版)上!!笔者强力推荐!!
  11. PB入门:基础语法与操作
  12. ajax/ 回调函数(回调地狱)
  13. 小蚂蚁学cURL笔记(1)
  14. 在 Microsoft Visual Studio Team System 和 Microsoft Visual SourceSafe 之间选择
  15. 计算机奥赛金牌排名,2019五大学科竞赛含金量排名
  16. android wms布局过程,深入理解WMS
  17. 如何使用SQL批量替换数据库特定字段中部分特定数据
  18. “浪潮信息龙蜥联合实验室”正式成立!2万+人在线,带你一文读懂MeetUp精彩瞬间
  19. python(数据分析与可视化)六
  20. MySQL建表,主键,外键

热门文章

  1. 自动化办公之excel教程(3):数据编辑操作,表格的美化操作,应用表格样式和单元格样式,制作报销汇总单
  2. python3位水仙花数计算
  3. wxWidgets:wxDataViewModel类用法
  4. boost::range模块replaced相关的测试程序
  5. boost::polygon模块voronoi相关的测试程序
  6. boost::multi_array模块实现测试reshaping功能
  7. DCMTK:从命令行修改DICOM文件的类
  8. DCMTK:转换dicom文件编码
  9. VTK:Remote之FrenetSerretFrame
  10. VTK:网格之ColoredElevationMap