cocos代码研究(1)sprite学习笔记

摘要:
通过各种方法创建精灵和动画//图像创建方法参数1:图像资源路径参数2:矩形选择区域自动分割=精灵::创建(“Images/glossini_dance_atlas.png”,矩形(x,y,85121));addChild(精灵);/*************华丽的分割线

各种方法创建Sprite和Animate

    //图片创建法 参数一:图片资源路径 参数二:Rect选区
    auto sprite = Sprite::create("Images/grossini_dance_atlas.png", Rect(x, y, 85, 121));
    addChild(sprite);

    /*************华丽分割线*************/

    //BatchNode类纹理创建法 
    //参数一:纹理图片 参数二:容量(子节点数量上限)
    auto batchNode = SpriteBatchNode::create("Images/grossini_dance_atlas.png", 50);
    //参数一:获取纹理 参数二:Rect选区
    auto sprite = Sprite::createWithTexture(batchNode->getTexture(), Rect(x, y, 85, 121));
    batchNode->addChild(sprite);
    addChild(batchNode);

    /*************华丽分割线*************/

    //精灵帧缓存SpriteFrameCache创建法 
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("animations/ghosts.plist", "animations/ghosts.png");
    auto sprite = Sprite::createWithSpriteFrameName("father.gif");
    addChild(sprite);

    /*************华丽分割线*************/

    //BatchNode + SpriteFrameCache + Sprite 组合使用
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("animations/ghosts.plist", "animations/ghosts.png");
    auto batchNode = SpriteBatchNode::create("animations/ghosts.png");
    auto sprite = Sprite::createWithSpriteFrameName("father.gif");
    batchNode->addChild(sprite);
    addChild(batchNode);

    /*************华丽分割线*************/

    //纹理创建法
    auto texture = Director::getInstance()->getTextureCache()->addImage("animations/dragon_animation.png");
    auto frame = SpriteFrame::createWithTexture(texture, Rect(132 * 0, 132 * 0, 132, 132));
    auto sprite = Sprite::createWithSpriteFrame(frame);

    /*************华丽分割线*************/

    //SpriteFrameCache创建动画法
    auto cache = SpriteFrameCache::getInstance();
    cache->addSpriteFramesWithFile("animations/grossini-aliases.plist", "animations/grossini-aliases.png");
    auto sprite = Sprite::createWithSpriteFrameName("grossini_dance_01.png");
    
    Vector<SpriteFrame*> animFrames(15);
    char str[100] = { 0 };
    for (int i = 1; i < 15; i++)
    {
        sprintf(str, "grossini_dance_%02d.png", i);
        auto frame = cache->getSpriteFrameByName(str);
        animFrames.pushBack(frame);
    }

    auto animation = Animation::createWithSpriteFrames(animFrames, 0.3f);
    sprite->runAction(RepeatForever::create(Animate::create(animation)));

    /*************华丽分割线*************/

    //AnimationCache加载animation创建动画法
    auto animationCache = AnimationCache::getInstance();
    auto animation = Animation::createWithSpriteFrames(animFrames, 0.2f);
    //参数一:animation  参数二:绑定别名
    animationCache->addAnimation(animation, "dance_blue");
    auto dance_blue = animationCache->getAnimation("dance_blue");

    /*************华丽分割线*************/

    //AnimationCache加载plist文件创建动画法
    auto frameCache = SpriteFrameCache::getInstance();
    frameCache->addSpriteFramesWithFile("animations/grossini.plist");
    auto animationCache = AnimationCache::getInstance();
    animationCache->addAnimationsWithFile("animations/animations.plist");
    auto normal = animationCache->getAnimation("dance_1");

    /*************华丽分割线*************/

    //动态加载纹理方法
    std::string plist_content;  //plist文件数据
    {
        std::string fullPath = FileUtils::getInstance()->fullPathForFilename("animations/grossini.plist");
        Data data = FileUtils::getInstance()->getDataFromFile(fullPath);
        if (!data.isNull())
            plist_content.assign((const char*)data.getBytes(), data.getSize());
    }
    std::string image_content; //图片文件数据
    {
        std::string fullPath = FileUtils::getInstance()->fullPathForFilename("animations/grossini.png");
        Data data = FileUtils::getInstance()->getDataFromFile(fullPath);
        if (!data.isNull())
            image_content.assign((const char*)data.getBytes(), data.getSize());
    }
    Image image;
    image.initWithImageData((const uint8_t*)image_content.c_str(), image_content.size());
    Texture2D* texture = new (std::nothrow) Texture2D();
    texture->initWithImage(&image);
    texture->autorelease();

    auto cache = SpriteFrameCache::getInstance();
    cache->addSpriteFramesWithFileContent(plist_content, texture); 

常用的API介绍

AnimationCache类

通过名字和动画添加到缓存。
void addAnimation (Animation *animation, const std::string &name)

从plist文件添加一个动画,确保SpriteFrameCache的帧在之前就加载过了
void addAnimationsWithFile (const std::string &plist)

返回一个之前添加的动画。 如果没有找到它将返回空。
Animation * getAnimation (const std::string &name)

从缓存中删除一个动画。
void removeAnimation (const std::string &name)

清除缓存,它会释放所有的动画对象和共享实例。
static void destroyInstance ()

SpriteFrameCache类

从 plist 文件添加多个 SpriteFrame,会自动加载相应的纹理。 当 plist 文件中未指定使用的 texture 文件时,plist 文件的扩展名替换为 .png 即为纹理文件的名称。
void addSpriteFramesWithFile (const std::string &plist)

使用指定的 plist 文件与纹理文件加载 SpriteFrame。
void addSpriteFramesWithFile(const std::string& plist,const std::string& textureFileName)

添加一个 SpriteFrame 并指定其名称。
void addSpriteFrame (SpriteFrame *frame, const std::string &frameName)

获取指定名称的 SpriteFrame。
SpriteFrame * getSpriteFrameByName (const std::string &name)

检查一个 plist 文件是否已经被加载。
bool isSpriteFramesWithFileLoaded (const std::string &plist) const

清理已加载的 SpriteFrame。
void removeSpriteFrames ()

根据指定的名称从缓存中删除一个 SpriteFrame。
void removeSpriteFrameByName (const std::string &name)

释放未使用的 SpriteFrame。 引用计数为 1 的 SpriteFrame 将被删除。 在进入一个新的场景时,可以通过调用该方法方便的释放不再使用的 SpriteFrame。
void removeUnusedSpriteFrames ()

将指定的 plist 文件中的 SpriteFrame 从缓存中删除
void removeSpriteFramesFromFile (const std::string &plist)

销毁 SpriteFrameCache 的实例。会释放所有的 SpriteFrame 和 retain 的实例。
static void destroyInstance()

免责声明:文章转载自《cocos代码研究(1)sprite学习笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IIS如何启用父目录python 连接oracle -- sqlalchemy及cx_Oracle的使用详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

过渡(transition) 动画(animation)

过渡(transition) 1.transition   -通过过渡可以指定一个属性发生变化时的切换效果,通过过渡可以创建一些好的效果,提升用户体验。   -可以同时设置过渡相关的所有属性,只有一个要求,如果要写延迟,则俩个时间中第一个是持续时间,第二个是延迟时间。 2.transition-property(指定要执行过渡的属性)   -多个属性间用“...

css3 animation 属性众妙

转自:凹凸实验室(https://aotu.io/notes/2016/11/28/css3-animation-properties/) 本文不会详细介绍每个 css3 animation 属性(需要了解的同学可先移步 MDN),而是结合实际的开发经验,介绍 css3 animation 属性的一些使用场景及技巧。 1. animation-delay...

自上而下渐显图片的CSS3实现

代码地址如下:http://www.demodashi.com/demo/12160.html 目录 一、实现思路 二、所用特性 三、示例代码 四、实例效果 五、组件化(Vue) 一、实现思路 从效果上来想,图片自上而下渐显,图片的位置和大小都是没有变动的。思考过后发现仅仅靠一个标签很难实现预期的效果,于是考虑加一个元素作为可见窗口,控制图片相对于可见...

Unity3D脚本中文系列教程(九)

Unity3D脚本中文系列教程(八) name 对象名称hideFlags 该物体是否被隐藏,保存在场景中或被用户修改继承的函数 GetInstanceID 返回该物体的实例id继承的类函数 operator bool 这个物体存在吗?Instantiate 克隆original物体并返回这个克隆。Destroy 移除一个游戏物体、组件或资源。Destro...

CSS3学习笔记(3)—左右飞入的文字

前几天看到一个企业招聘的动画觉得很炫,里面有个企业介绍的文字是用飞入的效果做出来的,今天尝试了写了一下,感觉还不错~(≧▽≦)/~啦啦啦 下面来看我做的动态效果: 其实上面的效果很简单的,我的截图软件有问题,所以不是很清晰,但是大概的效果出现了~~~屏幕颜色从红变白是因为我把鼠标从页面上移到截图软件上关闭截图,不要被这个干扰~~~~ 一、页面的主体布局...

利用css3制作的几个loading图

先看图,多数是从别人那里看的效果直接仿的,先开随笔,有了创意继续加 其实3个之后,脑子里立刻有个第四个的制作思路,无外乎是利用border或者块元素变形,然后构思好接下来的行为,写起来也非常简单,5个一共用了半个小时左右,缺的还是思路啊 代码如下 <!doctype html> <html> <head> <me...