博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
阅读量:5882 次
发布时间:2019-06-19

本文共 4219 字,大约阅读时间需要 14 分钟。

原文地址:
作者:
在cocos2d  0.9及以下版本中,CCAnimation中可以使用animationWithName,但在1.0及以上版本中,此方法已经不能使用了,而是使用animationWithFrames替代,
 
CCAnimation animation = CCAnimation.animationWithFrames(list);
[[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];
    而   animationWithFrames的参数是一个NSArray类型的数据,所以要经过一些转换后才能实现,具体实现参照如下例子: 

        CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"***.png"];

        CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:texture rect:CGRectMake(0, 0, texture.contentSize.width, texture.contentSize.height)];

       NSArray *array = [[NSArray alloc] initWithObjects:frame, nil];

        CCAnimation *animation = [CCAnimation animationWithFrames:array delay:0.2f];

        for(int i = 0; i < 3; i++)

        {

            int x = i % 3;

            [animation addFrameWithTexture:mgr.texture rect:CGRectMake(x*32, 0, 31, 30)];

        }

        id action = [CCAnimate actionWithAnimation:animation];

        [flight runAction:[CCRepeatForever actionWithAction:action]];

     此处的fight是CCSprite类型的变量

 

附:c++风格代码

CCTexture2D texture = CCTextureCache.sharedTextureCache().addImage(@"Animation\AndyBogard_by_SWP");             CCSpriteFrame fame0 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 0, 48 * 0, 32, 48));             CCSpriteFrame fame1 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 1, 48 * 0, 32, 48));             CCSpriteFrame fame2 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 2, 48 * 0, 32, 48));             CCSpriteFrame fame3 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 3, 48 * 0, 32, 48));             List
list = new List
(); list.Add(fame0); list.Add(fame1); list.Add(fame2); list.Add(fame3); CCAnimation animation = CCAnimation.animationWithFrames(list); CCSprite sprite = CCSprite.spriteWithSpriteFrame(fame0); sprite.position = new CCPoint(200, 200); addChild(sprite); CCAnimate animate = CCAnimate.actionWithAnimation(animation); animate.duration = 0.5f; sprite.runAction(CCRepeatForever.actionWithAction(animate));

 

基于cocos2d-x的动画都是采用了Action的方式来实现,这样做的导致了实现一个简单的动画就要写比较多的代码。在实际项目和开发中,可能需要我们自己去封装。

下面介绍一下,怎么在cocos2d-x for xna 中实现一个基本的动画。我准备一张动画源图,如下:

新建一个helloworld项目后,把图片加入到项目资源中。

在init()函数加入以下代码

#region 简单动画测试             CCTexture2D texture = CCTextureCache.sharedTextureCache().addImage(@"Animation\AndyBogard_by_SWP");             CCSpriteFrame fame0 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 0, 48 * 0, 32, 48));             CCSpriteFrame fame1 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 1, 48 * 0, 32, 48));             CCSpriteFrame fame2 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 2, 48 * 0, 32, 48));             CCSpriteFrame fame3 = CCSpriteFrame.frameWithTexture(texture, new CCRect(32 * 3, 48 * 0, 32, 48));             List
list = new List
(); list.Add(fame0); list.Add(fame1); list.Add(fame2); list.Add(fame3); CCAnimation animation = CCAnimation.animationWithFrames(list); CCSprite sprite = CCSprite.spriteWithSpriteFrame(fame0); sprite.position = new CCPoint(200, 200); addChild(sprite); CCAnimate animate = CCAnimate.actionWithAnimation(animation); animate.duration = 0.5f; sprite.runAction(CCRepeatForever.actionWithAction(animate)); #endregion

编辑运行就可以见到效果了。

简单过程是,使用CCTexture2D加载图片 ,用CCTexture2D生成对应的CCSpriteFrame(对应的就是帧),将CCSpriteFrame添加到CCAnimation生成动画数据,用CCAnimation生成CCAnimate(就是最终的动画动作),最后用CCSprite执行这个动作。

转载于:https://www.cnblogs.com/pengyingh/articles/2434161.html

你可能感兴趣的文章
c#中结构体和类的比较
查看>>
Linux磁盘配额
查看>>
JQuery UI的拖拽功能
查看>>
数据驱动销售——个性化推荐引擎
查看>>
C语言标准库函数qsort那点小事
查看>>
HL7 CDA高级培训
查看>>
Android 调用照相机拍照
查看>>
linux的C获取shell执行返回的结果
查看>>
关于spring mybateis 定义resultType="java.util.HashMap"
查看>>
程序员怎么留住健康?
查看>>
(转)C# 把我所积累的类库全部分享给博友(附件已经上传)
查看>>
Silverlight5 无法切换输入法,无法输入中文的原因及解决初探
查看>>
游戏开发基础:方向键的组合,八方向实现
查看>>
黑书-DP-方块消除 ****
查看>>
MySQL 分区
查看>>
我的架构经验系列文章 - 后端架构 - 语言层面
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
读取手机硬件信息
查看>>
一致哈希
查看>>
The connection to adb is down, and a severe error has occured. 问题解决
查看>>