- 浏览: 191676 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
luoqianjiang:
很好,谢谢
一些iOS高效开源类库 -
sgjsdf5944:
没看明白。。。。。。。。。。
UIWebView打开doc、pdf文件 -
593864589:
mac 上不支持呢?
cocos2d 粒子设计器 -
寻墨小楼:
多谢了...正在弄这个。
mysql for mac 安装和基本操作 -
yueliancao:
楼主如何联系啊 我的MAC系统 #LoadModule php ...
mac OS x中配置apache + php + mysql
原文地址:http://blog.csdn.net/xiaominghimi/article/details/7009503 最近也一直在忙,所以也只能每周的某一天抽出时间来分享一些知识点给童鞋们,希望童鞋们体谅下~ 那么废话不多说了,本篇知识点两个: 1.利用CCSpeed当精灵执行CCAnimate动作途中设置其播放的速度; 2.设置游戏的速率,让你自由设置整个游戏的速度; 首先介绍第一个知识点: 对于第一个知识点,精灵执行CCAnimate动作途中设置播放速度,说白一点就是当主角或者怪物播放一套帧动作(动画)的时候,可能突然受到其他因素影响希望主角或者怪物等动作放慢,也就是慢动作的感觉,那么这时候我们就需要设置动作的播放速度拉,也就是今天要介绍的CCSpeed这个类;可能Himi这里哇哇哇的说这么多还是没亭台明白吧...=。 = 那么下面我们来看看代码等就应该明白了; 至于精灵如何利用CCAnimate实现帧集合动画教程在之前已经讲述过,那么这里就不在赘述,如果还不清楚如何利用很多帧形成动画让精灵播放的童鞋请移步到:【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展Cocos2d源码的CCAnimation简化动画创建! 直接上一段代码如下: [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"animationsFrames.plist"];
CCSprite*mySprite=[CCSprite spriteWithSpriteFrameName:@"himi1.png"]; mySprite.position=ccp(120,150); [self addChild:mySprite]; CCAnimation*anim=[CCAnimation animationWithFrame:@"himi" frameCount:12 delay:0.1]; CCAnimate* animate = [CCAnimate actionWithAnimation:anim]; CCSequence *seq = [CCSequence actions:animate,nil]; CCRepeatForever* repeat = [CCRepeatForever actionWithAction:seq]; [mySprite runAction:repeat]; 以上代码创建一个帧动画(帧资源都在animationFrames.plist加载到内存中了),然后创建一个精灵并让其永久循环执行这个帧动画;
童鞋们想一想,如果在这个永久动作执行后,你想在一个任意时间设置这个动画播放的速度,那么就利用CCSpeed来实现了,代码如下: [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"animationsFrames.plist"]; //左侧正常速度的播放 CCSprite*mySprite=[CCSprite spriteWithSpriteFrameName:@"himi1.png"]; mySprite.position=ccp(120,150); [self addChild:mySprite]; CCAnimation*anim=[CCAnimation animationWithFrame:@"himi" frameCount:12 delay:0.1]; CCAnimate* animate = [CCAnimate actionWithAnimation:anim]; CCSequence *seq = [CCSequence actions:animate,nil]; //让你的永久动作放入speed中 CCSpeed *speed =[CCSpeed actionWithAction:[CCRepeatForever actionWithAction:seq] speed:1.0f]; [speed setTag:888];//设置tag能任意获取到其实例,并且对其进行操作 [mySprite runAction:speed]; CCSpeed *speed=(CCSpeed*)[sprite getActionByTag:88];
获取的时候是你之前runAction的精灵来利用getActionByTag来获取的! 那么下面继续添加代码,我们让一个由CCSpeed包装一个帧动画并让精灵执行后的5秒后让其速度变成原有播放速度的一半,代码如下: CCSprite *mySpriteByF =[CCSprite spriteWithSpriteFrameName:@"himi1.png"]; mySpriteByF.position=ccp(360,150); [self addChild:mySpriteByF z:0 tag:66]; anim=[CCAnimation animationWithFrame:@"himi" frameCount:12 delay:0.1]; animate = [CCAnimate actionWithAnimation:anim]; seq =[CCSequence actions:animate, nil]; CCSpeed *speed =[CCSpeed actionWithAction:[CCRepeatForever actionWithAction:seq] speed:1.0f]; [speed setTag:88]; [mySpriteByF runAction:speed]; [self schedule:@selector(slowForHimi) interval:5]; -(void)slowForHimi{ [self unschedule:@selector(slowForHimi)];//解除此选择器 CCSprite*sprite=(CCSprite*)[self getChildByTag:66]; CCSpeed *speed=(CCSpeed*)[sprite getActionByTag:88]; [speed setSpeed:0.5];//放慢原有速度的0.5倍 } [CCSpeed* setSpeed:XX]; 这里的XX参数指的是倍率,传入1表示原速,大于1表示增快,小于1表示放慢速度~
|
下面直接给出全部测试项目代码:
// // HelloWorldLayer.m // SLowAnimationByHimi // // Created by 华明 李 on 11-11-21. // Copyright Himi 2011年. All rights reserved. //
// Import the interfaces #import "HelloWorldLayer.h" #import "CCAnimationHelper.h" // HelloWorldLayer implementation @implementation HelloWorldLayer
+(CCScene *) scene { // 'scene' is an autorelease object. CCScene *scene = [CCScene node];
// 'layer' is an autorelease object. HelloWorldLayer *layer = [HelloWorldLayer node];
// add layer as a child to scene [scene addChild: layer];
// return the scene return scene; } //CCJumpTo实现,抛物线 // // on "init" you need to initialize your instance -(id) init{
if( (self=[super init])) { CCLabelTTF *label = [CCLabelTTF labelWithString:@"暂缓动作&设置整个游戏加速/减速" fontName:@"Marker Felt" fontSize:24]; label.position = ccp(260,260); [self addChild: label z:0 ]; label = [CCLabelTTF labelWithString:@"正常速度的播放" fontName:@"Marker Felt" fontSize:12]; label.position = ccp(120,220); [self addChild: label z:0 tag:99]; label = [CCLabelTTF labelWithString:@"左侧动态放慢的速度的动作" fontName:@"Marker Felt" fontSize:12]; label.position = ccp(350,220); [self addChild: label z:0 ];
[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"animationsFrames.plist"]; //左侧正常速度的播放 CCSprite*mySprite=[CCSprite spriteWithSpriteFrameName:@"himi1.png"]; mySprite.position=ccp(120,150); [self addChild:mySprite]; CCAnimation*anim=[CCAnimation animationWithFrame:@"himi" frameCount:12 delay:0.1]; CCAnimate* animate = [CCAnimate actionWithAnimation:anim]; CCSequence *seq = [CCSequence actions:animate,nil]; CCRepeatForever* repeat = [CCRepeatForever actionWithAction:seq]; [mySprite runAction:repeat];
//左侧动态放慢的速度的动作 CCSprite *mySpriteByF =[CCSprite spriteWithSpriteFrameName:@"himi1.png"]; mySpriteByF.position=ccp(360,150); [self addChild:mySpriteByF z:0 tag:66]; anim=[CCAnimation animationWithFrame:@"himi" frameCount:12 delay:0.1]; animate = [CCAnimate actionWithAnimation:anim]; seq =[CCSequence actions:animate, nil]; CCSpeed *speed =[CCSpeed actionWithAction:[CCRepeatForever actionWithAction:seq] speed:1.0f]; [speed setTag:88]; [mySpriteByF runAction:speed]; [self schedule:@selector(slowForHimi) interval:5]; } return self; }
-(void)slowForHimi{ [self unschedule:@selector(slowForHimi)];//解除此选择器 CCSprite*sprite=(CCSprite*)[self getChildByTag:66]; CCSpeed *speed=(CCSpeed*)[sprite getActionByTag:88]; [speed setSpeed:0.5];//放慢原有速度的0.5倍 }
// on "dealloc" you need to release all your retained objects - (void) dealloc { // in case you have something to dealloc, do it in this method // in this particular example nothing needs to be released. // cocos2d will automatically release all the children (Label)
// don't forget to call "super dealloc" [super dealloc]; } @end |
从截图中可能童鞋们看不出什么效果。等文章最后放出源码,大家运行就可以看到效果了-。 -
这里备注下:除了利用CCSpeed来实现慢动作之外,还有其他的一些方法,不怕麻烦的童鞋甚至可以尝试当需要慢动作的时候,取出当前的帧下标,然后利用指定帧下标的方法创建一个新的帧动画同时增加播放时间即可;(在上一节《iOS-Cocos2d游戏开发之二十一》中Himi封装了一个指定帧下标进行创建帧动画的方法,还没有看过的童鞋请移步到这里:【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展Cocos2d源码的CCAnimation简化动画创建!);再或者直接去修改Cocos2d-iphone引擎的源码;
Himi当时做的时候因为用CCSpeed方式有问题一直不行,就去改了源码弄的。后来才发现CCSpeed正确用法,我去了=。 =
这里Himi必须强调一点!!!!!!!
很多时候你的主角的动作利用CCAction来实现,移动则是在update刷帧函数或者一些选择器的方法中进行的,那么为了让你的主角慢动作比较逼真,那么Himi建议不要使用scheduleUpdate函数,因为这个你无法修改每次调用update的时间默认都是每帧都调用,那么你应该自己定义一个选择器当刷逻辑的函数,这样就能配合CCSpeed实现逼真慢动作拉~
下面我们来介绍第二个知识点:设置游戏速度
对于游戏速度最常见的出现在塔防游戏中,当玩家创建好防守的东东后开始出怪后,可能怪物移动速度慢,而玩家着急看到结果,那么我们就会人性化的加上加快游戏速度的按钮拉~那么这个功能在Cocos2d引擎中封装好的,一句代码即可完成,如下代码即可:
[[CCScheduler sharedScheduler] setTimeScale:XX];
OK,本篇就到此~
发表评论
-
cocos2d游戏开发,常用工具集合
2012-01-07 13:42 788位图字体工具Bitmap Font ToolsBMFont ( ... -
cocos2d-x开源游戏引擎发布0.10.0版,支持iphone/android/bada/win32/linux平台
2012-01-02 22:28 1524cocos2d-1.0.1-x-0.10.0版本 http:/ ... -
详解CCProgressTimer 进度条
2012-01-06 00:05 1036原文地址:http://blog.csdn.net/xi ... -
Cocos2D-iPhone-Extensions嵌入视频播放
2012-01-06 00:05 758原文地址:http://blog.csdn.net ... -
CCSprite利用Bezier(贝塞尔)做抛物线动作
2012-01-06 00:05 868原文地址:http://blog.csdn.net/xi ... -
浅析使用C++/C/OC在iOS游戏中混编
2012-01-11 22:10 1196原文地址:http://blog.csdn.net/xi ... -
使用Box2d物理系统
2012-01-11 22:10 863原文地址:http://blog.csdn.net/ ... -
添加粒子特效并解决粒子系统特效与Layer之间的坐标问题
2012-01-11 22:11 829原文地址:http://blog.csdn.net/ ... -
对触屏事件追加讲解,解决无法触发ccTouchMoved事件
2012-01-11 22:11 1013原文地址:http://blog.csdn.net/xi ... -
从零开始学习OpenGL ES之二 – 简单绘图概述
2012-01-02 22:29 1361还有许多理论知识需要讨论,但与其花许多时间在复杂的数学 ... -
一. 搭建cocos2d游戏引擎环境HelloWorld!
2012-01-29 16:05 728注意:本文经 Himi 论坛ID:xiaom ... -
Cocos2D自定义精灵类并为你的精灵设置攻击帧
2012-01-30 13:49 913上周貌似没有写新的博文,那么今天Himi写个精品的博文 ... -
Cocos2D-iPhone精灵的基础知识点总汇
2012-03-06 09:41 984最近写了不少Cocos2d的博文了,那么由于Him ... -
Cocos2D-iPhone游戏数据存储的四种常用方式
2012-03-06 09:41 1417首先向大家说句抱歉,可能一些童鞋看到我的微薄了,我说突然 ... -
Cocos2D-iPhone解决滚屏背景/拼接地图有黑边(缝隙)
2012-03-06 09:41 1788本章节主要为大家 ... -
灵活使用精灵可视区域(TextureRect)与锚点(anchorPoint)
2012-03-06 09:42 1038今天Himi单用一篇博文来给童鞋们介绍精灵相关 ... -
Cocos2D-iPhone添加本地通知(UILocalNotification)
2012-03-06 09:42 1769首先申明下:希望大家转载的时候不要忘记给原文连接, ... -
详解CCProgressTimer 进度条
2012-03-09 17:43 1016游戏开发中难免用到进度条,例如做一些游戏技能的C ... -
Cocos2D-iPhone-Extensions嵌入视频播放
2012-03-09 17:43 817自从Himi书籍《Android游戏编程之从零开始》一 ... -
CCSprite利用Bezier(贝塞尔)做抛物线动作
2012-03-09 17:43 1807如果我们想实现让CCSprite进行抛物线运动的话,那么 ...
相关推荐
【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)! http://blog.csdn.net/xiaominghimi/article/details/7009503
动作完成后会自动调用,但不应手动调用此方法,除非在特定动作如`CCSpeed`, `CCFollow`, `CCActionEase`, `CCSequence`, `CCRepeat`, `CCSpawn`, `CCReverseTime`, 和 `CCAnimate`中实现。 7. **step(ccTime dt)**:...
- 速度控制动作:如CCSpeed,可以调整动作的执行速度。 - 重复动作:如CCRepeat、CCRepeatForever,可以重复执行一个动作一定次数或无限次。 - 组合动作:如CCSequence,可以按顺序执行多个动作。 - 并行动作:...
在创建具体动作时,通常通过虚函数进行派生,实现具体动作的效果。 - **description()**:这是一个虚函数,用于返回动作的描述字符串。它在调试和记录动作信息时非常有用。 - **copyWithZone()**:这是一个虚函数...
4.10 动画动作类 132 4.10.1 精灵帧 133 4.10.2 精灵帧缓冲 134 4.10.3 动画类 135 4.10.4 动画动作 136 4.11 动画编辑器 136 4.11.1 概述 136 4.11.2 CocosBuilder编辑器中的精灵动画 137 4.11.3 SpriteX草莓编辑器...