骨骼动画_2

来源:互联网 发布:图片大小编辑软件 编辑:程序博客网 时间:2024/05/21 15:40

这是我从tests上面看的,在看了下别人的博文,对函数的注释。动画也是直接从tests资源下拷贝的,毕竟本人是程序员,不是美工,做出来的动画会很不协调的。下面就直接说代码了。

第一步:类似前面一样要导入libSpine

第二步:在工程中写代码,代码如下

//添加骨骼动画
auto skeletonNode = SkeletonAnimation::createWithFile("spine/spineboy.json","spine/spineboy.atlas");
//设置两个动画之间的衔接,动画混合,这里就是在动画切换之间,设置动画的一个衔接,这样看起来会很自然
skeletonNode->setMix("walk","jump",0.2f);
skeletonNode->setMix("jump","walk",0.4f);


skeletonNode->setAnimationListener(this,animationStateEvent_selector(HelloWorld::animationStateEvent));//设置动画监听事件
//设置当前播放动画,false表示不循环播放,true表示循环播放
skeletonNode->setAnimation(0,"walk",false);
//setAnimation方法只能播放一种动画,所以当要连续播放不同的动画时,
//需要使用addAnimation方法来实现,它可以一条一条的播放不同的动画。
skeletonNode->addAnimation(0,"jump",false);
skeletonNode->addAnimation(0,"walk",true);
skeletonNode->addAnimation(0,"jump",true,4);
//设置动画的播放快慢
skeletonNode->timeScale = 0.3f;
//设置是否显示骨骼,true表示显示,false表示隐藏
skeletonNode->debugBones = true;
skeletonNode->update(0);

//骨骼动画对象还能播放动画
skeletonNode->runAction(CCRepeatForever::create(CCSequence::create(CCFadeOut::create(1),
CCFadeIn::create(1),
CCDelayTime::create(5),
NULL)));
skeletonNode->setPosition(visibleSize.width/2,visibleSize.height/2);
this->addChild(skeletonNode);


void HelloWorld::animationStateEvent (spine::SkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount)
{

spTrackEntry* entry = spAnimationState_getCurrent(node->state, trackIndex);
const char* animationName = (entry && entry->animation) ? entry->animation->name : 0;


switch (type) {
case ANIMATION_START:
log("%d start: %s", trackIndex, animationName);
break;
case ANIMATION_END:
log("%d end: %s", trackIndex, animationName);
break;
case ANIMATION_COMPLETE:
log("%d complete: %s, %d", trackIndex, animationName, loopCount);
break;
case ANIMATION_EVENT:
log("%d event: %s, %s: %d, %f, %s", trackIndex, animationName, event->data->name, event->intValue, event->floatValue, event->stringValue);
break;
}
}

0 0
原创粉丝点击