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


    各种方法创建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()

  • 相关阅读:
    unp.h
    美拍视频下载
    动态加载ajax 腾讯视频评论
    已知二叉树的先序,中序遍历,求后续遍历

    JSP九大内置对象及四个作用域
    转换数据库连接池为hikaricp
    JSP Tomcat8.0运行连接池时发生异常【AbstractMethodError oracle.jdbc.driver.T4CConnection.isValid(I)Z】
    tomcat启动时出现There are no resources that can be added or removed from the server
    java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
  • 原文地址:https://www.cnblogs.com/damowang/p/4844770.html
Copyright © 2020-2023  润新知