如何给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);
}

 

 

posted @ 2013-11-08 14:03  MrBlue  阅读(8537)  评论(0编辑  收藏  举报