Cocos2dx实现精灵的加速(适用于塔防游戏)
来源:互联网 发布:网络禁毒知识竞赛答案 编辑:程序博客网 时间:2024/05/17 01:05
通过设置Scheduler的timeScale,可以实现全局的加、减速。代码非常简单:
CCScheduler* pScheduler = CCDirector::sharedDirector()->getScheduler();
pScheduler->setTimeScale(2.0f);
//实现加速效果
pScheduler->setTimeScale(0.5f);
//实现减速效果
2)实现对某个CCActionInterval动作的加速、减速
方法一:很容易想到的一个方法就是改变CCAnimation的delay unit。代码如下:
CCAnimation* pAnimation = CCAnimationCache::sharedAnimationCache()->animationByName(“xxx”);
pAnimation->setDelayUnit(pAnimation->getDelayUnit()*0.2f);
//速度为原来的5倍
这个方法有一个缺点:改变了CCAnimationCache中这个animation的delay unit。也就是说以后即使再从CCAnimationCache中获取这个animation,其delay unit已经是原来的0.2倍了。
方法二:cocos2d-x提供了CCSpeed的类,可以实现动画速度的调节。用法如下:
CCActionInterval* pActionInterval = CCMoveTo::create(5.0f, ccp(500.0f, 100.0f));
CCSpeed* pSpeed= CCSpeed::create(pActionInterval, 1.5f);
//1.5倍速运行
CCSpeed* pSpeed1 = CCSpeed::create(pActionInterval, 0.2f);
// 0.2倍速运行
pSprite->runAction(pSpeed);
注意,如果pSprite有已经运行的动作,要用pSprite->stopActionByTag()停掉之前的动作,不然两个动作就叠加到一起了。
3)对某个CCFiniteTimeAction类型动作的加速、减速
大部分时候,一个游戏人物的动作并非由单一一个CCActionInterval类型的动作构成,而是一串动作连起来,构成一个Sequence。用CCSequence::create(…)创建的对象都是CCFinteTimeAction类型的,CCSpeed并不适用。在CCSpeed类的说明里,明确指出”This action can’t be Sequenceable because it is not an CCIntervalAction”。那对于Sequence就束手无策了吗?非也。cocos2d-x引擎自带例子中,schedulerTest给我们展示了如何控制某个sprite的 scheduler的timescale。废话少说,直接看代码。
在class TwoSchedulers中定义了两个customer的scheduler和两个CCActionManager。
CCScheduler *sched1;
CCScheduler *sched2;
CCActionManager *actionManager1;
CCActionManager *actionManager2;
在onEnter函数中,分别对两个sprite设置customer的ActionManager.
CCScheduler *defaultScheduler = CCDirector::sharedDirector()->getScheduler();
// Create a new scheduler, and link it to the main scheduler
sched1 =
new
CCScheduler();
defaultScheduler->scheduleUpdateForTarget(sched1, 0,
false
);
// Create a new ActionManager, and link it to the new scheudler
actionManager1 =
new
CCActionManager();
sched1->scheduleUpdateForTarget(actionManager1, 0,
false
);
// Replace the default ActionManager with the new one.
pSprite1->setActionManager(actionManager1);
通过以上的代码,就可以通过改变sched1的timescale来改变pSprite1的动作的快慢了。有了这种方法,那么就可以放弃CCSpeed的那种方法了。
- Cocos2dx实现精灵的加速(适用于塔防游戏)
- cocos2dx塔防游戏逻辑
- 探cocos2dx对游戏精灵(sprite_nodes)的实现。(源码版本2.2.3)
- cocos2dx 实现横版游戏中屏幕随精灵移动
- cocos2dx游戏-可爱的小精灵的各种用法大全
- 变速齿轮,游戏加速的实现
- 简单的实现一个类似于Cocos2dx的游戏框架——导演、场景、层、精灵(已填坑5%)
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--其他
- cocos2dx 塔防游戏中射击动作笔记
- 精灵游戏实现
- cocos2dx 3.2 实现鼠标拖动精灵移动的效果!
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--游戏开始界面
- 【Unity】按住鼠标右键,移动场景内镜头(适用于塔防等游戏视角)
- 【Unity】按住鼠标右键,移动场景内镜头(适用于塔防等游戏视角)
- 游戏中慢动作|加速动作的实现
- Qt版本-塔防游戏实现一
- Qt版本-塔防游戏实现二
- Qt版本-塔防游戏实现三
- Android Studio 使用NDK编程
- Android-复制创建可操作的图片
- 用Python操作Mysql
- JVM中锁优化简介
- HDU 1863 畅通工程(最小生成树模板题)
- Cocos2dx实现精灵的加速(适用于塔防游戏)
- 随着双手之上的动作落下,一声细微的闷响徒然响彻开来
- Delphi6 调试
- Linux挂载NTFS硬盘
- MyJobLink链接MapReduce作业案例,新旧API比较
- 使用setuptools打包python项目
- 而且通过这种办法摄取的元气不论多么的雄浑与庞大,对于他的经脉皆是不会出现一丝的损伤
- jqGrid怎么设置初始化页面时不加载数据(不向服务器请求数据)
- <context-param>与<init-param>的区别与作用