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 * 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); 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相关推荐
- oracle设置缓存大小设置多少,【数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※】...
[数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※] Oracle 9i引入了一个新的途径来预测数据缓冲cache中附加数据缓存的所带来的好处的多少.V$DB_CACHE_A ...
- 嵌入式平台音频播放器设计(数据缓冲)
一.目的 在之前的博文中我们分析过播放器整体的软件框架,本文在其基础上继续探讨数据缓冲机制. 二.设计 在播放设计中,我们需要考虑两类数据的调度管理,一类是事件类的管理,一类是音频数据的管理. 例如在 ...
- 数据缓冲策略 —— 无缓冲、行缓冲、全缓冲(缓冲区大小测试)
printf打印数据时,一般会先把数据放入C缓冲区,然后再刷新到内核缓冲区,最后再写入硬件 这个过程中,数据从C缓冲区迁移到内核缓冲区的操作我们称为缓冲(也可以理解为刷新) 下面我们将介绍 缓冲策略的 ...
- 包装类(Integer、Long...)中的数据缓冲
面试时经常被问到Integer i=127和Integer j=127的区别? java 1.5 的自动装箱拆箱机制是编译特性还是虚拟机运行时特性?分别是怎么实现的? 本文章以Int ...
- DIV遮罩层--数据缓冲效果的实现
这个非本人所写,拿的网上的自己改了下 JS代码: View Code function sAlert(str) {var msgw, msgh, bordercolor;msgw = 300;//提示 ...
- (转)关于数据库主键和外键(终于弄懂啦)
一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学 ...
- 小议数据库主键选取策略
我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一 行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更 ...
- UDP分两次接收数据包 MSG_PEEK
问题: 今天在测试e_link协议时,使用SOCK_DGRAM UDP连接服务器,由于协议由定长头部,加数据组成,且头部中包含了数据的长度,因此设计时分两次进行接收. 先接收头部,解析出数据长度,再次 ...
- 创业公司做数据分析(三)用户行为数据采集系统 (转)
http://blog.csdn.net/zwgdft/article/details/53542597 作为系列文章的第三篇,本文将重点探讨数据采集层中的用户行为数据采集系统.这里的用户行为,指的是 ...
最新文章
- CSS之布局(盒模型)
- cuda runtime error (59) : device-side assert triggered when running transfer_learning_
- 使用gulp和vsc构建高效的typescript开发环境
- LDR指令和LDR伪指令区别
- 怎么把matlab 训练的model 保存下来 然后在opencv 中调用
- 如何用VB制作DLL文件
- 征集大家的网站如何防范DDOS攻击解决方案
- 三星note9刷Android9,【极光ROM】-【三星NOTE9 N960X-9810】-【V21.0 Android-Q-THB】
- 蓝牙 - 注册SIG账号
- 值得一看的Spring实战 (第5版)上!!笔者强力推荐!!
- PB入门:基础语法与操作
- ajax/ 回调函数(回调地狱)
- 小蚂蚁学cURL笔记(1)
- 在 Microsoft Visual Studio Team System 和 Microsoft Visual SourceSafe 之间选择
- 计算机奥赛金牌排名,2019五大学科竞赛含金量排名
- android wms布局过程,深入理解WMS
- 如何使用SQL批量替换数据库特定字段中部分特定数据
- “浪潮信息龙蜥联合实验室”正式成立!2万+人在线,带你一文读懂MeetUp精彩瞬间
- python(数据分析与可视化)六
- MySQL建表,主键,外键
热门文章
- 自动化办公之excel教程(3):数据编辑操作,表格的美化操作,应用表格样式和单元格样式,制作报销汇总单
- python3位水仙花数计算
- wxWidgets:wxDataViewModel类用法
- boost::range模块replaced相关的测试程序
- boost::polygon模块voronoi相关的测试程序
- boost::multi_array模块实现测试reshaping功能
- DCMTK:从命令行修改DICOM文件的类
- DCMTK:转换dicom文件编码
- VTK:Remote之FrenetSerretFrame
- VTK:网格之ColoredElevationMap