zoukankan      html  css  js  c++  java
  • cocos2dx中快速完成一段可播放动画

    版本:cocos2dx 2.2.6

    IDE: VS2012

    语言:C++98

    CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
    cache->addSpriteFramesWithFile("walk.plist");
    CCSprite* pSprite = CCSprite::createWithSpriteFrameName("zzlx1.JPG");
    pSprite->setPosition(ccp(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2));

    首先将图片资源加载到内存中去,用精灵帧缓存的方式来创建精灵。

    精灵创建的方式有多种,但是精灵帧缓存创建精灵的方式最为常用,因为占用内存和效率。

    相关知识:http://www.cnblogs.com/andyque/articles/1988097.html

    pSprite精灵是动画帧的第一张图,接下来我们需要一个数组存储剩余的动画帧

    CCArray* pArray = CCArray::create();
    char name[20];
    for (int i = 2;i <= 8; i++)
    {
        sprintf(name, "zzlx%d.JPG", i);
        pArray->addObject(cache->spriteFrameByName(name));
    }

    一共8张图,名称为zzlx1到zzlx8,这里有2点要注意的:

    1.名称最好符合某种规律,否则需要一个字符串数组来存一个动画的动画帧名称。

    2.这里JPG是大小写敏感的,我的图片名称结尾是大写JPG。如果代码中是小写则会出错。

    数组创建好后,我们来创建Animation和Animate。

    CCAnimation* pAnimation = CCAnimation::createWithSpriteFrames(pArray,0.1f);
    CCAnimate* pAnimate = CCAnimate::create(pAnimation);
    pSprite->runAction(CCRepeatForever::create(pAnimate));
    this->addChild(pSprite);

    Animation是动画,存储了所有的精灵帧和播放间隔。而Animate是动作,是Action。Action是作用于CCSprite的。

    这里CCRepeatForever是循环播放,最后将pSprite加入层中。

    全部代码:

    CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
    cache->addSpriteFramesWithFile("walk.plist");
    CCSprite* pSprite = CCSprite::createWithSpriteFrameName("zzlx1.JPG");
    pSprite->setPosition(ccp(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2));
        
    //精灵帧数组
    CCArray* pArray = CCArray::create();
    char name[20];
    for (int i = 2;i <= 8; i++)
    {
        sprintf(name, "zzlx%d.JPG", i);
        pArray->addObject(cache->spriteFrameByName(name));
    }
    
    CCAnimation* pAnimation = CCAnimation::createWithSpriteFrames(pArray,0.1f);
    CCAnimate* pAnimate = CCAnimate::create(pAnimation);
    pSprite->runAction(CCRepeatForever::create(pAnimate));
    this->addChild(pSprite);

    cocos2dx中的三种缓存

    http://blog.csdn.net/star530/article/details/23612487

    这里AnimationCache,动画缓存,参考资料中并没有写完整,使用动画缓存如果用一般的plist文件是不行的,需要特殊生成plist文件,

    这样的plist文件会一个key对应一组图片,这样使用key就能载入一组完整的动画帧,播放动画。

    最终效果

  • 相关阅读:
    curl命令学习笔记
    IOS安全测试思维导图
    Hello World
    Hive SQL使用和数据加载的一点总结
    采用最低松弛度优先调度的实时系统调度程序
    MongoDB Map Reduce速度提升20倍的优化宝典
    释放时间不同可中断平行机问题在线算法
    RPC框架系列——Avro
    Solr 3.6.2索引MySQL数据库配置过程
    IKAnalyzer 独立使用 配置扩展词库
  • 原文地址:https://www.cnblogs.com/beyond-time-space/p/4566795.html
Copyright © 2011-2022 走看看