Animation Animate Armture三个动画的使用

创建帧动画

SpriteFrameCache 精灵缓冲池
第一种是读取plist文件到精灵缓冲池,获得每一帧的精灵帧,添加到Animation动画中,设置setDelayPerUnit 每一帧的时间,然后获得Animate 动作,最后播放动作
备注:怎么样才能获取plist文件里面的数量?通过判断获取到的是NULL对象来判断吗?
第二种是通过AnimationCache 管理动画的单例; 它用于缓存的动画,读取到的plist文件必须是带有animation这个key的;通过getAnimation获得指定的动画

读取骨骼动画

通过ArmatureDataManager,同步或者异步加载骨骼动画到ArmatureData里面,然后通过Armature进行创建动画,播放

cocostudio::ArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("DemoPlayer0.png","DemoPlayer0.plist","DemoPlayer.ExportJson");
auto spritecache = SpriteFrameCache::getInstance();
    spritecache->addSpriteFramesWithFile("grossini.plist");
    auto animation3 = Animation::create();
    Vector<SpriteFrame* >vectorSprite;
    for (int i = 1; i <= 14; i++) {
        SpriteFrame *temp = spritecache->spriteFrameByName(StringUtils::format("grossini_dance_%02d.png",i));
        animation3->addSpriteFrame(temp);
    }
    animation3->setDelayPerUnit(1);
    Animate *animatetest = Animate::create(animation3);
    CCLOG("%d",spritecache->getReferenceCount());
    auto cache = AnimationCache::getInstance();
    cache->addAnimationsWithFile("animations-2.plist");
    auto lunzi = Sprite::createWithSpriteFrameName("grossini_dance_01.png");
    lunzi->setPosition(Point(300, 300));

    auto animation2 = cache->getAnimation("dance_1");
    auto animate2 = Animate::create(animation2);
    lunzi->runAction(RepeatForever::create(animatetest));
    cocostudio::ArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("DemoPlayer0.png","DemoPlayer0.plist","DemoPlayer.ExportJson");
    cocostudio::Armature* armature = cocostudio::Armature::create("DemoPlayer");
    armature->getAnimation()->playByIndex(0);
    armature->setPosition(Point(400, 400));

    this->addChild(lunzi);
    this->addChild(armature);

骨骼动画的帧事件,通过动画制作的时候绑定到骨骼动画帧中,currentFrameIndex为第几帧触发,evt输出的是骨骼动画事件的名字

    cocostudio::ArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("chongwu.png", "chongwu.plist", "miaomiao.xml");
    cocostudio::Armature* armature2 = cocostudio::Armature::create("miaomiao");
    armature2->getAnimation()->playByIndex(1);
    armature2->setPosition(Point(500, 500));
    (armature2->getAnimation())->setFrameEventCallFunc(this,cocostudio::SEL_FrameEventCallFunc(&HelloWorld::onFrameEvent));
void HelloWorld::onFrameEvent(cocostudio::Bone * bone, const std::string & evt, int originFrameIndex, int currentFrameIndex)
{
    auto bonedata =bone->getBoneData();
    CCLOG("bone x=%f,y=%f", bonedata->x, bonedata->y);
    CCLOG("evt =%s", evt.c_str());
    CCLOG("originFrameIndex=%d", originFrameIndex);
    CCLOG("currentFrameIndex=%d", currentFrameIndex);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值