前两节根据一般游戏能想到的,分别学习了两大交互:触摸、菜单。已经能实现许多功能,但是此时做出来的东西却感觉有些……死气沉沉?这是因为少了动画效果。
动画在游戏中十分重要,如果不能动,就基本变成文字游戏了。因此这次学习了《权威》的第四章:动作特效与动画。
依然接着上一节的例子来学习,上次做了一个能收放自如且随处乱摆的菜单(虽然有些丑…),每次只要点击MENU就可以弹出来。但是弹出的太突兀了,因此可以将其弹出做成一个动画。
书中说到,动作类(CCAction)是依托于结点类(CCNode)及其子类存在的,也就是说,以动作类创建一个对象之后,要将其作用于一个结点对象才能动起来。
CCAction有三个子类:CCFiniteTimeAction、CCFollow、CCSpeed。这里要用到的是CCFiniteTimeAction的子类CCActionInterval,延时动作类。
延时动作类就是作用之后需要执行一段时间的,作为这个实例中的弹出动画很合适。
延时动作有如下种类:
移动、缩放、扭曲、旋转、跳跃、贝赛尔曲线、淡入淡出、闪烁、色值渐变。
取其中移动、缩放、旋转和跳跃功能实现如下:
CCActionInterval* actionto = CCMoveTo::create(1,ccp(200,200));
CCActionInterval* actionsc = CCScaleTo::create(1,0.5);
CCActionInterval* actionrt = CCRotateBy::create(1,360);
CCActionInterval* actionjp = CCJumpBy::create(1,200),30,5);
//CCActionInterval* actionto_back = actionto->reverse();
hero->runAction(actionto);
hero->runAction(actionsc);
hero->runAction(actionrt);
hero->runAction(actionjp);
hero->runAction(CCSequence::create(actionto,NULL));
遇到的问题:在测试中,如果在弹出的过程里点击MENU消除它则会发生错误,原因是动作还在执行,而结点已经被释放了,解决办法是,在释放时参数选为true(默认):this->removeChild(hero,true); 未解决的问题:书中说reverse函数实现可将动作倒置,但是我使用后,却抛出了错误。
原文链接:https://www.f2er.com/cocos2dx/338773.html