版本:
cocos2dx 3.9
cocostudio 3.9
首先抱怨一下cocos2dx官方对cocostudio的不更新,不过现在cocostudio也够用了,不过还是要腹黑一下。。。。
今天接触到了cocostudio的动画部分,所以就做个简单的总结
载进行动画编辑时,很多都用到了 “开始记录动画”这个勾选选项
这个选项是很重要的,不开启的话比如 帧事件,不透明度都是没法使用的,这个坑我真的认了!!!
动画还是和以前的一样。没差
然后就是cpp的编写了
bool SplashScene::init()
{
//导入场景文件
Node*csb = CSLoader::createNode("SplashScene.csb");
this->addChild(csb);
//这个类是Action动作类的子类
timeline::ActionTimeline*action = CSLoader::createTimeline("SplashScene.csb");
csb->runAction(action);
//从第0帧开始,并且只播放一次
action->gotoFrameAndPlay(0,false);
//获取动画持续时间
float duration = action->getDuration();
//获取结束帧,经测试是你动画添加帧的最后位置
float lastFrame = action->getEndFrame();
//捕获事件帧
action->setFrameEventCallFunc(CC_CALLBACK_1(SplashScene::onFrameEvent,this));
//捕获到最后一帧的回调事件,比如你总共是60帧的动画,那么60就是最后帧,每次循环到60都会触发一次
action->setLastFrameCallFunc(CC_CALLBACK_0(SplashScene::gameStart,this));
return true;
}
void SplashScene::onFrameEvent(cocostudio::timeline::Frame* frame)
{
timeline::EventFrame*env = dynamic_cast<timeline::EventFrame*>(frame);
if(!env)
return ;
auto str = env->getEvent();
//这个是你在cocostudio里帧事件的名称
if(str == "game_start")
log("game_start");
}
void SplashScene::gameStart()
{
log("game start");
}
在我调试的时候出现了一个错误,就是在csb文件改变下,而源程序没有重新编译,程序能正常运行,但调用显示不正确(vs2012),不知道这什么情况
发一张我最终的效果图吧