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
若一致则返回空指针


居然神奇的解决了

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐