【Cocos2d入门教程五】Cocos2d-x动作篇
2015-08-11 20:33
435 查看
动作类(Action)是所有动作的基类,它创建的一个对象代表一个动作。动作作用于Node,包括继承于之下的Layer、Sprite。因此每个动作 都需要由Node对象或者其继承者执行。动作类(Action)作为基类,实际上是一个接口,动作类的大多数实现类都派生于有限时间动作类 (FiniteTimeAction)。其关系图如下:
在实际开发中我们通常用到两类动作-即时动作和持续动作,它们均继承于有限时间动作类。
1. 即时动作
放置–Place
隐藏– Hide
显示– Show
可见切换–ToggleVisibility
2.延时动作
移动到–MoveTo
移动– MoveBy
跳跃到–JumpTo
跳跃–JumpBy
贝塞尔–BezierBy
放大到–ScaleTo 设置放大倍数,是浮点型。
放大–ScaleBy
旋转到–RotateTo
旋转–RotateBy
闪烁–Blink 设定闪烁次数
色调变化到–TintTo
色调变换–TintBy
变暗到–FadeTo
由无变亮–FadeIn
由亮变无–FadeOut
3.组合动作
序列– Sequence
同步–Spawn
重复有线次数–Repeate
动作反向–Reverse
动画–Animation
无限重复–RepeatForever
4.速度变化
EaseIn 由慢至快。
EaseOut 由快至慢
EaseInOut 由慢至快再由快至慢。
EaseSineIn 由慢至快。
EaseSineOut
由快至慢
EaseSineInOut
由慢至快再由快至慢。
EaseExponentialIn
由慢至极快。
EaseExponentialOut
由极快至慢。
EaseExponentialInOut由慢至极快再由极快至慢。
Speed 人工设定速度,还可通过SetSpeed不断调整
下面以几个常用函数作为案例:
注意:这里需要注意To跟By的不同,To的话在坐标系中是以绝对位置,By的话在坐标系中是以node对象的相对位置进行执行动作。
如果你想搭配reverse()一起用的话用To是无效的,必须用By.
Ok.关于Cocos2d-x的动作就分享至此。不对的地方还望指出互相探讨学习
在实际开发中我们通常用到两类动作-即时动作和持续动作,它们均继承于有限时间动作类。
1. 即时动作
放置–Place
隐藏– Hide
显示– Show
可见切换–ToggleVisibility
2.延时动作
移动到–MoveTo
移动– MoveBy
跳跃到–JumpTo
跳跃–JumpBy
贝塞尔–BezierBy
放大到–ScaleTo 设置放大倍数,是浮点型。
放大–ScaleBy
旋转到–RotateTo
旋转–RotateBy
闪烁–Blink 设定闪烁次数
色调变化到–TintTo
色调变换–TintBy
变暗到–FadeTo
由无变亮–FadeIn
由亮变无–FadeOut
3.组合动作
序列– Sequence
同步–Spawn
重复有线次数–Repeate
动作反向–Reverse
动画–Animation
无限重复–RepeatForever
4.速度变化
EaseIn 由慢至快。
EaseOut 由快至慢
EaseInOut 由慢至快再由快至慢。
EaseSineIn 由慢至快。
EaseSineOut
由快至慢
EaseSineInOut
由慢至快再由快至慢。
EaseExponentialIn
由慢至极快。
EaseExponentialOut
由极快至慢。
EaseExponentialInOut由慢至极快再由极快至慢。
Speed 人工设定速度,还可通过SetSpeed不断调整
下面以几个常用函数作为案例:
Menu * menu =Menu::create(); menu ->setPosition(Vec2::ZERO); addChild(menu); //----------------------------------------------------------------------- //Flip MenuItemFont * FlipItem =MenuItemFont::create("Filp",CC_CALLBACK_1(NewScene::bgFlip, this)); FlipItem ->setPosition(60,350); menu->addChild(FlipItem); void NewScene::bgFlip(Ref * ref) { if (testSp ->isFlippedX()) { FlipX * fx = FlipX ::create(false); testSp ->runAction(fx); } else { FlipX * fx = FlipX ::create(true); testSp ->runAction(fx); } } //----------------------------------------------------------------------- //MoveTo MenuItemFont * MoveItem =MenuItemFont::create("MoveTo",CC_CALLBACK_1(NewScene::bgMove, this)); MoveItem ->setPosition(60,300); menu->addChild(MoveItem); void NewScene::bgMove(Ref* psend) { MoveTo * moveAct = MoveTo::create(0.5,Vec2(400, 400)); testSp ->runAction(moveAct); } //----------------------------------------------------------------------- //RatateTo MenuItemFont * RotateItem =MenuItemFont::create("RotateTo",CC_CALLBACK_1(NewScene::bgRotate, this)); RotateItem ->setPosition(60,250); menu->addChild(RotateItem); void NewScene::bgRotate(Ref * ref) { RotateTo * rotate =RotateTo::create(0.5, 100, 100); testSp ->runAction(rotate); } //----------------------------------------------------------------------- //ScaleTo MenuItemFont * ScaleItem =MenuItemFont::create("ScaleTo",CC_CALLBACK_1(NewScene::bgScale, this)); ScaleItem ->setPosition(60,200); menu->addChild(ScaleItem); void NewScene::bgScale(Ref* psend) { ScaleTo * scale =ScaleTo::create(0.5, 2); testSp ->runAction(scale); } //----------------------------------------------------------------------- //Hide Show MenuItemToggle * toggleMenu =MenuItemToggle::createWithCallback( CC_CALLBACK_1(NewScene::bgToggle,this), MenuItemFont::create("Show"), MenuItemFont::create("Hide"), NULL); toggleMenu ->setPosition(60,150); menu ->addChild(toggleMenu); void NewScene::bgToggle(Ref * ref) { if(testSp->isVisible()) { Hide * hide =Hide::create(); testSp ->runAction(hide); ShowTag =0; } else { Show * show =Show ::create(); testSp ->runAction(show); ShowTag =1; } } //----------------------------------------------------------------------- //FadeIn FadeOut MenuItemToggle * FadeToggle =MenuItemToggle::createWithCallback( CC_CALLBACK_1(NewScene::FadeToggle,this), MenuItemFont::create("FadeIN"), MenuItemFont::create("FadeOut"), NULL); FadeToggle ->setPosition(60,100); menu ->addChild(FadeToggle); void NewScene::FadeToggle(Ref * ref) { if(FadeTag == 1) { FadeOut * FadeOut = FadeOut ::create(1); testSp ->runAction(FadeOut); FadeTag = 0; } else if (FadeTag == 0) { FadeIn * FadeIn = FadeIn ::create(1); testSp ->runAction(FadeIn); FadeTag = 1 ; } } //----------------------------------------------------------------------- //曲线运动 MenuItemFont * Cardin =MenuItemFont::create("Cardin",CC_CALLBACK_1(NewScene::CardIn, this)); Cardin ->setPosition(60,50); menu->addChild(Cardin); void NewScene::CardIn(Ref * ref) { PointArray * array = PointArray ::create(20); array ->addControlPoint(Point(100,100)); array ->addControlPoint(Point(200,400)); array ->addControlPoint(Point(300,500)); CardinalSplineTo * CardIn = CardinalSplineTo::create(1, array, 5); testSp ->runAction(CardIn); }
注意:这里需要注意To跟By的不同,To的话在坐标系中是以绝对位置,By的话在坐标系中是以node对象的相对位置进行执行动作。
如果你想搭配reverse()一起用的话用To是无效的,必须用By.
Ok.关于Cocos2d-x的动作就分享至此。不对的地方还望指出互相探讨学习
相关文章推荐
- cocos2d-js 查看对象内部
- Cocos Studio和Cocos2d-x版本对应关系
- 纯粹娱乐:了解cocos2d-x
- Cocos2dx中的回调函数
- cocosdx里面A*算法的实现#ifndef __CAT_SPRITE_H__ #define __CAT_SPRITE_H__ #include "HelloWorldScene.h" #incl
- 基于cocos2d-x-3.2学习Box2D(二)
- Cocos2d-JS中使用Cocos Studio资源02:登录界面
- cocos2d-x3.2自己测试Box2D一些坑
- cocos2d-js 阻挡touch事件层
- Cocos2d-x中,在过渡场景异步加载图片和声音
- Cocos2d-x 3.4版本 新建项目 IOS版
- cocos2dx 3.6源码分析之文件路径
- Cocos2d-JS中使用Cocos Studio资源04:关卡选择界面
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocoside1.1.0卡顿
- Cocos2d-JS中使用Cocos Studio资源03:设置界面
- Cocos2d-JS 3.3 模态对话框的实现
- Cocos2d-x3.2中添加Android手机震动
- cocos2dx 3.x android平台移植 apk打包教程
- Cocos2d-x实现简单的翻牌效果