第三讲 Action动作
来源:互联网 发布:gif动画录制软件 编辑:程序博客网 时间:2024/04/29 04:14
一、基本动作
3、跟随动作(CCFollow)
创建并执行一个动作方法如下:
CCAction *action = //后面跟动作的创建方法
node->runAction(action);//node为一个创建好的节点或节点的子类
CCAction中包含三个子类:
CCFollow:调整动作的执行速度
CCSpeed:使节点跟随指定的另一个节点移动
CCFiniteTimeAction:加入了时间属性的动画类,用于派生各种由时间插入值进行计算的动画
CCFiniteTimeAction还有两个子类
1、瞬时动作(CCActionInstant)
定义:不需要时间等待,即刻完成
CCActionInstant
CCCallFunc:回调函数
CCFlipX:水平翻转(以X为轴)
CCFlipY:垂直翻转(以Y为轴)
CCHide:隐藏
CCShow:显示
CCPlace:放置[ 相当于setPosition(ccp(x,y)) ]
CCReuseGrid
CCStopGrid
CCToggleVisibility
实例:
bool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCSprite *sp = CCSprite::create("Icon.png"); sp->setPosition(ccp(100, 100)); this->addChild(sp,0,1); CCMenuItemFont *label = CCMenuItemFont::create("放置动作"); CCMenuItemFont *label1 = CCMenuItemFont::create("隐藏动作"); CCMenuItemFont *label2 = CCMenuItemFont::create("显示动作"); CCMenuItemFont *label3 = CCMenuItemFont::create("水平翻转动作"); CCMenuItemFont *label4 = CCMenuItemFont::create("垂直翻转动作"); CCMenuItemToggle *toggle = CCMenuItemToggle::createWithTarget(this, menu_selector(HelloWorld::func), label,label1,label2,label3,label4,NULL); CCMenu *menu = CCMenu::create(toggle,NULL); this->addChild(menu); return true;}//执行按钮时的回调函数void HelloWorld::func(CCObject *pSender){ //获取当前层中编号为1的精灵对象 CCSprite *sp = (CCSprite*)this->getChildByTag(1); static int index = 0; switch (index) { case 0: //定义移动位置 sp->runAction(CCPlace::create(ccp(300, 100))); break; case 1: //隐藏 sp->runAction(CCHide::create()); break; case 2: //显示 sp->runAction(CCShow::create()); break; case 3: //水平翻转(以X为轴) sp->runAction(CCFlipX::create(true)); break; case 4: //垂直翻转(以Y为轴) sp->runAction(CCFlipY::create(true)); break; } index = index == 4 ? 0 : index + 1;}
瞬时动作(CCActionInstant)——>子类:CCCallfunc家族
当一个动作或动作序列结束以后,需要调用某个函数用于执行一个任务的时候使用CCCallfunc家族
(1)CCCallfunc:无参普通的回调函数
(2)CCCallfuncN:传递当前调用的精灵对象
(3)CCCallfuncND:传递当前调用的精灵对象,和一个任意类型数据
(4)CCCallfuncO:传递当前调用的精灵对象,任意的cocos2d的对象
2、延时动作(CCActionInterval)
定义:执行需要一定时间的动作,即该动作在指定的时间内完成,有过渡效果
持续动作类名一般有两种后缀,一种时To,一种时By
To表示最终达到的目标值,By表示增量
例:
CCMoveTo::create(0.5f,ccp(5,5));//相对坐标原点,移动指定位置CCMoveBy::create(0.5f,ccp(5,5));//相对节点自身移动,以当前节点为原点
(1)简单动作类
CCMoveTo移动到CCMoveBy按…移动 例:
如果有一个多次点击的功能按钮,那它的回调函数是
void HelloWorld::menuCallback(CCObject *pScene){ CCSprite *sp = (CCSprite*)this->getChildByTag(1); static int index = 0; switch (index) { case 0: { //移动到(时间,目标参数位置) CCActionInterval *moveTo = CCMoveTo::create(5, ccp(300, 100)); sp->runAction(moveTo); break; } case 1: { //移动到(时间,从目前位置移动的位移) CCActionInterval * moveBy = CCMoveBy::create(5, ccp(100, 100)); //reverse 动作moveBy的反向动作 CCActionInterval * actionByBack = moveBy->reverse(); sp->runAction(actionByBack); break; } case 2: { //跳(时间,位置,高度,次数) //参数1:跳跃所需的时间,参数2:跳跃到的位置,参数3为跳跃的高度,参数4:次数 CCActionInterval * jumpTo = CCJumpTo::create(2, ccp(300, 200), 50, 4); sp->runAction(jumpTo); break; } case 3: { //跳(时间,相对当前的目标位置,高度,次数) //参数1:跳跃所需的时间,参数2:从目前基础上再跳跃的参数,参数3:高度,参数4:次数 CCActionInterval * jumpBy = CCJumpBy::create(2, ccp(200, 100), 50, 4); //跳(动作jumpBy的反向动作 CCActionInterval * actionByBack = jumpBy->reverse(); sp->runAction(actionByBack); break; } case 4: { //淡入(动作所需要的时间) CCActionInterval * fadeOut = CCFadeOut::create(2); sp->runAction(fadeOut); break; } case 5: { //淡出(动作所需要的时间) CCActionInterval * fadeIn = CCFadeOut::create(2); sp->runAction(fadeIn); break; } } index = index == 5 ? 0 : index + 1;}
(2)复杂动作类
CCAnimate帧动画CCGridAction网格动画
(3)组合动作类
CCRepeat重复执行几次CCRepeatForever永远重复执行
1)重复动作(CCRepeat、CCRepeatForever):类似于循环,可以重复执行某一个动作或者动作序列
例:如果有一个多次点击的功能按钮,那它的回调函数是
void HelloWorld::menuCallback(CCObject * pSender){ CCSprite *sp = (CCSprite*)this->getChildByTag(1); //定义两个动作 move and move2 CCActionInterval* move = CCMoveTo::create(2, ccp(300, sp->getPositionY())); CCActionInterval* move2 = CCMoveTo::create(2, ccp(100, 100)); //创建一个顺序序列 CCFiniteTimeAction* seq = CCSequence::create(move,move2,NULL); //创建一个重复动作(动作或者动作序列,重复次数) CCActionInterval* repeat = CCRepeat::create(seq, 2);//参数2为重复次数 sp->runAction(repeat); //CCActionInterval* repeatForever = CCRepeatForever::create((CCActionInterval*)seq); //无限重复 //sp->runAction(repeatForever); //按钮失效其中pSender是label ((CCMenuItemLabel*)pSender)->setEnabled(false); }
2)同步动作序列(CCSpawn):同时执行多个动作,最后完成时间以组成动作序列中基本动作耗时最大的决定
如:一边移动、一边放大、一边旋转
例:如果有一个多次点击的功能按钮,那它的回调函数是
void HelloWorld::menuCallback(CCObject* pSender){ CCSprite *sp = (CCSprite*)this->getChildByTag(1); //创建延时动作移动、放大、旋转 CCActionInterval* move = CCMoveTo::create(1, ccp(300, sp->getPositionY()));//移动(时间,位移坐标) CCActionInterval* scale = CCScaleTo::create(1, 3);//放大(时间,倍数) CCActionInterval* rotate = CCRotateTo::create(1, 190);//旋转(时间,角度) //将以上动作对象创建顺序序列 CCActionInterval* spwn = CCSpawn::create(move,scale,rotate,NULL); sp->runAction(spwn); //禁用按钮 ((CCMenuItemLabel *)pSender)->setEnabled(false);}
3)顺序动作序列(CCSequence):让节点一个接一个的执行
例:如果有一个多次点击的功能按钮,那它的回调函数是
void HelloWorld::menuCallback(CCObject* pSender){ CCSprite *sp = (CCSprite*)this->getChildByTag(1); //创建延时动作移动、放大、旋转 CCActionInterval* move = CCMoveTo::create(2, ccp(300, sp->getPositionY())); CCActionInterval* scale = CCScaleTo::create(2, 3); CCActionInterval* rotate = CCRotateTo::create(4, 190); //将以上动作对象创建顺序序列 CCFiniteTimeAction* seq = CCSequence::create(move,scale,rotate,NULL); sp->runAction(seq); //禁用按钮 ((CCMenuItemLabel *)pSender)->setEnabled(false); }
3、跟随动作(CCFollow)
void HelloWorld::menuCallback(CCObject* pSender){ CCSprite *sp = (CCSprite*)this->getChildByTag(1); sp->runAction(CCMoveTo::create(2, ccp(930, sp->getPositionY())));//精灵向右运动 CCFollow* follow = CCFollow::create(sp,CCRectMake(0, 0, 960, 320)); //精灵在屏幕上不动,背景向左移动,第二个参数是移动范围 this->runAction(follow);}
4、速度(CCSpeed)
void HelloWorld::menuCallback(CCObject* pSender){ CCSprite *sp = (CCSprite*)this->getChildByTag(1); CCActionInterval *move = CCMoveTo::create(10, ccp(300, sp->getPositionY())); //参数2对于1时,加速度快,所用时间改为原时间/参数2;小于1时,速度减慢 CCSpeed *speed = CCSpeed::create(move, 20); sp->runAction(speed);}
0 0
- 第三讲 Action动作
- Action 动作
- Action 动作
- Action 动作
- 动作Action
- struts2第三讲笔记,登录界面实例,以.action结尾
- Java Action 动作
- 动作指令Action
- Cocos2D常用动作(Action)
- cocos2dx-Action动作
- corejavaI---action(动作)
- cocos2dx-Action动作
- Cocos2Dx之动作Action
- cocos2dx-Action动作
- cocos2dx之动作Action
- Struts2 Action/动作
- Cocos2d-x --Action (动作)
- cocos2d-x Action动作
- Codeforces Round #258 (Div. 2) C, D
- xargs用法详解
- 字节序大小端
- [转]VC++动态链接库(DLL)编程深入浅出(zz)
- TCL学习总结
- 第三讲 Action动作
- hdu 2112 HDU Today(图论:迪杰斯特拉)
- leetcode 刷题之路 17 Reorder List
- HDU 1565 && HDU 1569 方格取数 (网络流之最小割)
- 第四讲 动画与触摸事件
- 游戏人工智能(AI)开发(一)
- 关于大数据量查询报表优化
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- 每天学点Scala 1