当前位置 : 主页 > 手机开发 > 其它 >

cocos 学习笔记(三)动作

来源:互联网 收集:自由互联 发布时间:2021-06-13
前两节根据一般游戏能想到的,分别学习了两大交互:触摸、菜单。已经能实现许多功能,但是此时做出来的东西却感觉有些……死气沉沉?这是因为少了动画效果。 动画在游戏中十分

前两节根据一般游戏能想到的,分别学习了两大交互:触摸、菜单。已经能实现许多功能,但是此时做出来的东西却感觉有些……死气沉沉?这是因为少了动画效果。
动画在游戏中十分重要,如果不能动,就基本变成文字游戏了。因此这次学习了《权威》的第四章:动作特效与动画。
依然接着上一节的例子来学习,上次做了一个能收放自如且随处乱摆的菜单(虽然有些丑…),每次只要点击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, ccp(200, 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函数实现可将动作倒置,但是我使用后,却抛出了错误。

网友评论