cocos2d-x中定时器中spine动画变更问题
·
spine对象创建 : skeletonNode
skeletonNode = spine::SkeletonAnimation::createWithJsonFile("spine/spineboy-ess.json", "spine/spineboy.atlas", 0.5f);
skeletonNode->setAnimation(0, action, true);
- 用摇杆控制角色移动时改变动画 ,用cocos2d中scheduleUpdate调用setAnimation(0, action, true);方法更改动画时出现画面停止不动的现象
- update方法
void test::update(float delta) {
if (!rocker->RockerRun) {
skeletonNode->setAnimation(0, "walk", true);
}else (rocker->RockerRun) {
changeMove();
skeletonNode->setAnimation(0, "run", true);
}
}
我也很无奈实在找不到什么解决办法只好改下源码
居然神奇的解决了
思考为什么会卡住,反复测试之后发现画面不动并不是卡住了
而是update反复调用setAnimation(0, action, true)方法
造成了画面卡住的原因
它并不是像程序那样一行行执行
| 比如_
V
skeletonNode->setAnimation(0, "walk", true);
skeletonNode->addAnimation(0, "jump", false, 3);
skeletonNode->addAnimation(0, "run", true);
程序会按顺序执行完这些
但是
update
是一帧执行:skeletonNode->setAnimation(0, “walk”, true);
第二帧还是执行:skeletonNode->setAnimation(0, “walk”, true);
动画一直停留在第一帧,动画第二帧还没出现,又掉用这个方法回到第一帧
所以看起来没有动
so!
我重新更改了SkeletonAnimation.h和SkeletonAnimation.cpp这两个文件
在我能力范围内
…\cocos2d\cocos\editor-support\spine\SkeletonAnimation.h
private:
typedef SkeletonRenderer super;
//————我的代码——————————
std::string sname;
//————————————————————
};
…\cocos2d\cocos\editor-support\spine\SkeletonAnimation.cpp
spTrackEntry* SkeletonAnimation::setAnimation (int trackIndex, const std::string& name, bool loop) {
//————我的代码——————————
if (sname == name) {
return nullptr;
}
sname = name;
//————————————————————
spAnimation* animation = spSkeletonData_findAnimation(_skeleton->data, name.c_str());
if (!animation) {
log("Spine: Animation not found: %s", name.c_str());
return 0;
}
return spAnimationState_setAnimation(_state, trackIndex, animation, loop);
}
如果传递进来的动作名和原动作名不一致则赋值给sname
若一致则返回空指针
居然神奇的解决了
更多推荐
所有评论(0)