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

 

   
//看精灵的运行速度

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

}

 

 

 

 

 

时间: 2024-09-29 07:39:49

2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO的相关文章

Visual Foxpro中的多用户及数据缓冲问题

visual|数据|问题 主题:Visual Foxpro中的多用户及数据缓冲问题 绍 很多狐友(Foxers)都是从Dbase―FoxBase―Foxpro―VFP这样一条路走过来的,如果说从FoxBase 到Foxpro是一次飞跃,那么从Foxpro到VFP就是一次升华.漫漫编程路上的两次大变化都伴随着升级的兴奋与适应的痛苦,惯性思维往往使我们容易忽略新版本的新内容.我们先来看看下面这个在表单中编辑记录的例子: 在Foxpro 2.X时代,我是这样设计的: 1. 在屏幕上放置与表中字段对应的

设置数据缓冲大小

Oracle 9i引入了一个新的途径来预测数据缓冲cache中附加数据缓存的所带来的好处的多少.V$DB_CACHE_ADVICE显示了20个可能的缓冲cache大小的"脱靶"率(范围从当前大小的10%到200%).由于Oracle 9i中你需要维护五个分开的数据缓冲cache,因此这个特性非常重要.这些数据缓冲包括: DEFAULT池 KEEP池 RECYCLE池 2K数据缓冲 4K数据缓冲 8K数据缓冲 16K数据缓冲 32K数据缓冲 警告:当你把DBA_CACHE_ADVICE设

缓存-关于串口接收数据缓冲问题

问题描述 关于串口接收数据缓冲问题 我用串口测试实时接收一个2k采样率的正弦波并显示波形,不管是我自己写的程序还是Labview 都出现了同一个问题,就是一开始波形的频率是对的,然后我进入中断一会,回来继续接收数据 感觉波形被压缩了一样,突然来了一大堆数据,过一会就会恢复正常.这是缓存区哪里的问题呢?接收缓冲,传输缓冲? 解决方案 接收缓冲吧,数据没被处理. 解决方案二: 在中断时,串口设备还在不断的发送数据: 中断结束,恢复正常时:接收缓存区有一大堆数据,这时你有两种处理方式: 1.把这些数据

如何防止发到打印机的数据不会因超过打印机数据缓冲上限而丢失?

问题描述 用java写了一个程序,用来将文本文件打印出来.代码如下:package MyTest;import gnu.io.*;import java.io.*;public class comm_test02 { public static void main(String[] args) { try { (new comm_test02()).run(args[0]); } catch (Exception ex) { ex.printStackTrace(); } } private v

物理隔离与数据交换:网闸的设计原理与误区

一.什么是网闸 网闸技术的需求来自内网与外网数据互通的要求,比如政府的电子政务是对公众服务,与互联网连通,而内网的政府办公网络,由于保密的要求,内网若与网连通,则面临来自公网的各种威胁.安全专家给出的建议是:由于目前的安全技术,无论防火墙.UTM等防护系统都不能保证攻击的一定阻断,入侵检测等监控系统也不能保证入侵行为完全捕获,所以最安全的方式就是物理的分开,所以在公安部的技术要求中,要求电子政务的内.外网络之间"物理隔离".没有连接,来自外网对内网的攻击就无从谈起. 但是,网络的物理隔

物理隔离与数据交换:网闸中的核心技术

网闸中隔离控制技术的几个发展方向 网闸不同于防火墙,也不同于堡垒机,是因为网闸从物理上保证内外网的不互通,其中隔离控制部分是实现这个物理隔离的关键.这里重点分析目前流行的几种技术: 1.摆渡交换技术 摆渡开关是网闸最常用的倒换方式.为了保持内外网的物理隔离,所以在与内网连接的时候,一定与外网断开,但与外网连接的时候,一定与内网断开.所谓断开是只物理通讯的"高阻"状态或物理的停电,没有进行通讯的可能. 在内外网处理单元内都有自己的缓冲空间,用来存储需要交换的数据文件,在隔离与交换控制单元

将数据直接发送到打印机

下面是一个将数据直接发送到打印机的示例: 记得在文件中加上#include winspool.h bool Print(char* szPrinterName, char* szBuffer)// szBuffer是我们希望发送到打印机的数据缓冲{HANDLE hPrinter; //打印机句柄int iLen = strlen(szBuffer);// 发送数据的长度DWORD dwWritten; // 已经向打印机写了多少if(OpenPrinter(szPrinterName, &hPr

自己编个流媒体缓冲服务器

问题描述 自己编个流媒体缓冲服务器 是这样的:我想写个流媒体服务器把下载下来的视频缓存同时开放端口让播放器从缓存中读取媒体数据进行播放.但不太清楚这个原理是怎么实现的怎么管理缓存中下载下来的媒体数据一边下载一边播放缓存中已播放的数据是不是需要清空?连续下载下来的数据是不是直接填充到刚清空的缓存空间里?缓存空间一开始时就申请了固定的空间大小了. 解决方案 这个我也没有做过,不过在网上找到了一个关于流媒体服务器搭建的博客,我把内容贴过来你可以看看老实说,我也不知道你想在什么平台上做,这个是andro

表格存储:使用TableStoreWriter进行高并发、高吞吐的数据写入

概述     表格存储(原OTS)的一大特性是能够支撑海量数据的高并发.高吞吐率的写入,特别适合日志数据或物联网场景(例如轨迹追踪或溯源)数据的写入和存储.这些场景的特性是,会在短时间内产生大量的数据需要消化并写入数据库,需要数据库能够提供高并发.高吞吐率的写入性能,需要满足每秒上万行甚至上百万行的写入吞吐率.针对这些场景,我们在存储层做了很多的优化(本篇文章不赘述),同时在SDK接口层也做了一些优化,专门提供了一个简单易用.高性能的数据导入接口.     TableStoreWriter是基于