您的位置:首页 > 移动开发 > Cocos引擎

cocos2d 用MotionStreak给骨骼动画的刀加拖尾(刀光拖尾)

2015-07-25 15:22 696 查看
最近刚去公司工作,没有一点经验,真是苦逼,做一个demo,当骨骼动画(刀这个骨骼砍得时候能够出现拖尾效果,真是想破脑袋),经过不断的尝试,总结出了一个方法:

直接上代码:

MotionStreak *streak = MotionStreak::create(1, 20, 35, ccc3(255, 255, 255), "yhmm_texiao.png");
streak->reset();
streak->setAnchorPoint(ccp(0.5,0.5));

创建拖尾,这个不用解释了吧!,接下最重要的是怎么获取骨骼动画呢?(对了前提是你要把骨骼动画加载到了你的层里面并且能显示出来,网上很多这方面的代码你们可以去看看),我只贴出部分,

//这个是将骨骼放到层中

ArmatureDataManager::getInstance()->addArmatureFileInfo("art/armature/ani_pack_hero.png", "art/armature/ani_pack_hero.plist", "
art/armature/hero_zhujue.ExportJson");

Armature *armature = Armature::create("hero_zhujue");

armature->setPosition(Point(winSize.width / 2, winSize.height / 2-49));

// 播放动画
armature->getAnimation()->playWithIndex(5);
//armature->setScale(0.6);
addChild(armature);

//下面这个很重要 了

Bone *bone=armature->getBone("Layer69");//你可以在hero_zhujue.ExportJson里面找到刀这个骨骼对应的名称,对了你最好是将hero_zhujue.ExportJson导入
cocostudio 里面去查看,这个是支持这样导入的

接下来就是怎么设置拖尾的位置了。

画拖尾呢?需要我们每一帧去更新它的位置,我们给他开个定时器

Vec2 pos3;//这个最好放在.h文件里面

scheduleUpdate();

//更新拖尾的位置

void LayerGameHero::update(float dt){
pos3.x = bone->getWorldInfo()->x;
pos3.y = bone->getWorldInfo()->y;
streak->setPosition(pos3 + armature->getPosition());

}//切记,这个是取世界坐标,不能取本地坐标,为什么呢?你可以试试,用getPostion(),不管你怎么弄坐标都是0啊,不过你可以转换为本地坐标也是可以的,还有个很重要,要加上armature->getPosition(),这个动画的Postion啊,不然画不到你想要的位置的,最后贴上我的图片吧!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-x