如何给spine骨骼动画挂载粒子特效

目的是要把粒子挂载到骨骼动画的某个一个部件上,其实最主要是找对位置。

预览效果,左手红火,右手蓝火,很炫吧:)

//init

bool HelloWorld::init()
{
    //
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    CCSkeletonAnimation* skeletonNode = CCSkeletonAnimation::createWithFile("spineboy.json", "spineboy.atlas");
    skeletonNode->setAnimation("walk", true);
    skeletonNode->setPosition(ccp(300,0));
    //skeletonNode->debugSlots = true;
    skeletonNode->debugBones = true;
    skeletonNode->timeScale = 0.5f;
    addChild(skeletonNode,0,1);
    
    ParticleSun* _emitter1 = ParticleSun::create();
    _emitter1->setTexture( TextureCache::getInstance()->addImage("fire.png") );
    addChild(_emitter1, 10, 2);

    ParticleGalaxy* _emitter2 = ParticleGalaxy::create();
    _emitter2->setTexture( TextureCache::getInstance()->addImage("fire.png") );
    skeletonNode->addChild(_emitter2, 10, 20);

    scheduleUpdate();

    return true;
}

 

//update

void HelloWorld::update (float deltaTime) 
{
    CCSkeletonAnimation* skeletonNode = (CCSkeletonAnimation*)getChildByTag(1);
    
    Bone* pBone = skeletonNode->findBone("left hand");
    CCPoint pt = skeletonNode->convertToWorldSpace(ccp(pBone->worldX,pBone->worldY));//粒子1是添加在Scene上的 所以需要坐标转换一下
    ParticleSun* _emitter1 = (ParticleSun*)getChildByTag(2);
    _emitter1->setPosition(pt);

    pBone = skeletonNode->findBone("right hand");
    pt = ccp(pBone->worldX,pBone->worldY);//粒子2直接挂到骨骼动画上,所以不需要转换坐标
    ParticleGalaxy* _emitter2 = (ParticleGalaxy*)skeletonNode->getChildByTag(20);
    _emitter2->setPosition(pt);
}

 

 

转载于:https://www.cnblogs.com/mrblue/p/3414158.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值