Cocos2d-x学习:动作Action(延时类动作)[2.0.1]
来源:互联网 发布:淘宝win10激活码危险 编辑:程序博客网 时间:2024/05/29 17:18
Cocos2d-x提供了很多基本的动作类,主要包括两大类:
一类是瞬时动作(CCActionInstant),一类是延时动作(CCActionInterval),今天主要记录一下延时动作类的一般用法。
1.Cocos2d-x提供的基本延时类动作都提供了ActionTo和ActionBy两种:(Action泛指各种动作)
ActionTo是指动作结束的状态,也就是动作的终点。
ActionBy是指动作执行的状态,也就是动作的执行过程。
常用的延时动作类包括:
移动动作:CCMoveBy CCMoveTo
旋转动作:CCRotateBy CCRotateTo
缩放动作:CCScaleBy CCScaleTo
跳跃动作:CCJumpBy CCJumpTo
淡入淡出动作:CCFadeBy CCFadeIn CCFadeOut
贝赛尔曲线动作:CCBezierBy CCBezierTo
......
2.一般用法
动作中最简单的就要数移动了,下面就分别以CCMoveBy和CCMoveTo举个例子,代码很简单:
void HelloWorld::spriteMove(){ CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCActionInterval *actionTo = CCMoveTo::actionWithDuration(2.0f, CCPointMake(winSize.width * 3 / 4, winSize.height / 2)); CCActionInterval *actionBy = CCMoveBy::actionWithDuration(2.0f, CCPointMake(-winSize.width / 2, 0)); CCActionInterval *actionByCopy = (CCActionInterval *) actionBy->copy(); CCActionInterval *actionBack = actionBy->reverse(); //原路返回 pSprite->runAction(CCSequence::actions(actionTo, actionByCopy, NULL)); pSprite2->runAction(CCSequence::actions(actionBy, actionBack, NULL));}
用法很简单,CCMoveTo中的CCPoint参数就是想要“移动到”的位置点,而CCMoveBy中的CCPoint参数就是分别对应x,y轴对应的偏移量
这里需要注意的是actionBy不能重复使用,如果第二次使用的话,会继续从第一次使用到的位置开始继续,不明白的可以尝试一下,现象很明显!
3.动作完成回调
动作一般支持3种回调方式
(1).无发送者无数据回调:CCCallFunc,示例如下:
void HelloWorld::actionCallback(){ CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF *label = CCLabelTTF::labelWithString("Action Callback!", "Marker Felt", 32); label->setPosition(ccp(winSize.width / 2, winSize.height / 2)); this->addChild(label);}(2).有发送者无数据回调:CCCallFuncN (N是CCNode),示例如下
void HelloWorld::actionCallbackN(CCNode *pSender) { CCSprite *sprite = (CCSprite *) pSender; // 回调变红色 sprite->setColor(ccRED); }(3).有发送者有数据回调:CCCallFuncND (N是CCNode,D是data,是void *类型)
void HelloWorld::actionCallbackND(CCNode *pSender, void *data) { CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCSprite *sprite = (CCSprite *) pSender; // 回调变蓝色 sprite->setColor(ccBLUE); // 接收回调数据 CCLabelTTF *label = CCLabelTTF::labelWithString((char *) data, "Marker Felt", 32); label->setPosition(ccp(winSize.width / 2, winSize.height / 2)); this->addChild(label); CCLog((char *) data); }
使用回调示例如下:
void HelloWorld::actionListen() { CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCFiniteTimeAction *action = CCSequence::actions( CCMoveBy::actionWithDuration(2.0f, CCPointMake(winSize.width / 2, 0)), CCCallFunc::actionWithTarget(this, callfunc_selector(HelloWorld::actionCallback)), NULL); CCFiniteTimeAction *actionN = CCSequence::actions( CCMoveBy::actionWithDuration(2.0f, CCPointMake(-winSize.width / 2, 0)), CCCallFuncN::actionWithTarget(this, callfuncN_selector(HelloWorld::actionCallbackN)), NULL); CCFiniteTimeAction *actionND = CCSequence::actions( CCMoveBy::actionWithDuration(2.0f, CCPointMake(winSize.width / 2, 0)), CCCallFuncND::actionWithTarget(this, callfuncND_selector(HelloWorld::actionCallbackND), (void *) "Callback Data"), NULL); oldManSprite->runAction(actionND); youngSisterSprite->runAction(actionN); }
总结:要根据你的需求来定义回调函数
如果只是简单的通知,则使用CCCallFunc;如果需要知道发送者信息,则使用CCCallFuncN;如果还要附带一些数据信息,则使用CCCallFuncND
参考:http://www.2cto.com/kf/201207/138112.html
- Cocos2d-x学习:动作Action(延时类动作)
- Cocos2d-x学习:动作Action(延时类动作)[2.0.1]
- Cocos2d-x学习(二):动作Action(延时类动作)
- Cocos2d-x学习(二):动作Action(延时类动作)
- cocos2d-x学习(二):动作Action(延时类动作)
- Cocos2d-x --Action (动作)
- cocos2d-x Action动作
- Cocos2d-x动作Action
- cocos2d-x基础知识(二)瞬时动作/延时动作
- cocos2d-x 瞬时动作/延时动作
- cocos2d-x学习笔记(四)动作(Action)
- Cocos2d-x学习笔记(15)(Action动作)
- Cocos2d-x 3.2动作类Action 整理
- cocos2d-x库的动作(Action)
- 【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-延时动作
- 【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-延时动作
- cocos2d-x Action:持续动作
- cocos2d-x Action:其他动作
- SQL语法大全
- 修改panel的html
- vmware win7下从新安装的注册标表问题
- linux下读取windows文件遇到的问题
- ISAPI_Rewrite3_0087 full版破解
- Cocos2d-x学习:动作Action(延时类动作)[2.0.1]
- Mysql 通过Root账户进去修改 其他账户的密码
- OpenGL绘制半透明物体
- Data Developer (sutra)
- 导出报表的几种方式
- 常用正则表达式 匹配身份证号,手机号,固话,邮政编码
- 新时尚Windows8开发(14):如何选取联系人信息
- 嫣然一笑苦了情
- Hibernate 参数设置一览表