cocos2d-x ios游戏开发初认识(七) 简单的动画

前面有一节说了帧动画,就是让精灵改变自己的位置、形状、大小来实现相应的动作,这讲主要是要通过一些方法来实现精灵的移动,产生各种炫丽的动画,也可能让你找到一点游戏场景。

下面具体根据代码分析:

为了清晰最好将前几节的代码注释掉。

    //根据前面的知识先创建一个菜单

    CCMenuItemFont *item =CCMenuItemFont::create("开始游戏",this, menu_selector(MainScene::onMenuItem));//点击事件

    //添加到菜单栏里面

   CCMenu *menu = CCMenu::create(item,NULL);//可以传多个

    menu->setPosition(ccp(100,500));

   this->addChild(menu);

    

    //创建一个精灵

    sprite = CCSprite::create("Icon-72.png");

   sprite->setPosition(ccp(300,300));

   this->addChild(sprite);

运行:


onMenuItem函数里实现一些动画:

//1.实现精灵的隐藏

    CCHide *hide =CCHide::create(); //隐藏精灵

   sprite->runAction(hide);         //运行动画

运行 点击开始游戏:


发现精灵隐藏了,这里有很多动画都可以去尝试

    CCHide *hide =CCHide::create(); //隐藏精灵

   CCFadeTo *to = CCFadeTo::create(2,0); //0~255 淡入淡出用时2s

   CCMoveTo *toto = CCMoveTo::create(2,ccp(500, 300)); //移动到某个点用时2s

   CCMoveBy *toby = CCMoveBy::create(2,ccp(300, 0));   //2秒增加 x300 y不变

    CCJumpBy *by =CCJumpBy::create(2,ccp(100,0), 200, 1);//2秒钟内跳到xy(300,0)的位置每次会跳200一共跳30

   sprite->runAction(hide);         //运行动画

这些是一些基础的动画 都可以去尝试 截图看不到明显的效果,只要sprite->runAction(hide) 改括号里面内容。

//2.实现一个简单的轨迹

轨迹图片:


    //实现一个轨迹

    CCPointArray *pa =CCPointArray::create(5);//创建一个点数组

    pa->addControlPoint(ccp(0,0));

    pa->addControlPoint(ccp(100,0));  //向右移动

    pa->addControlPoint(ccp(100, -50));//向下移动

    pa->addControlPoint(ccp(150, -50));//向右移动

    pa->addControlPoint(ccp(150,0));  //向向移动

    pa->addControlPoint(ccp(300,0));  //向右移动

    CCCardinalSplineBy *spby =CCCardinalSplineBy::create(5, pa,1); //按轨迹移动

   sprite->runAction(spby);           //运行一个动画

运行:


//3.实现一个曲线


代码:

    //Bezier实现曲线运动

    ccBezierConfig bc;

    bc.controlPoint_1 =ccp(400, 400); //控制点1

    bc.controlPoint_2 =ccp(800, 200); //控制点2

    bc.endPosition =ccp(900, 300);    //终点

   CCBezierTo *bezie = CCBezierTo::create(3, bc); //传引用

   sprite->runAction(bezie);           //运行一个动画

运行:


自己运行才能看到效果!!!

//4.通过CCSequence 实现组合动画 顺序执行

    //CCSequence实现组合动画 顺序执行

   CCMoveTo *tototo = CCMoveTo::create(2,ccp(900, 300));//移动

   CCEaseSineIn *in = CCEaseSineIn::create(tototo);      //控制速度先慢后快可以加可以不加试试

   CCBlink *blink = CCBlink::create(3,10);              //闪烁一个动画

    CCDelayTime *delay =CCDelayTime::create(2);

   CCSequence *sequence = CCSequence::create(in,delay,blink,NULL);//组合动画按顺序执行 先移动 然后延时 最后闪烁

   sprite->runAction(sequence);           //运行一个动画

运行:


自己运行才能看到效果!!!


//5.通过CCSpawn 实现组合动画 并行执行

    //并行执行动画

    CCMoveTo *totototo = CCMoveTo::create(2, ccp(900, 300));

    CCRotateBy *rotate = CCRotateBy::create(2, 3600); //旋转 3600

    CCSpawn *spawn = CCSpawn::create(totototo,rotate,NULL);

    sprite->runAction(spawn);

运行:


自己运行才能看到效果!!!

//6.动画执行完毕 可以进行回掉

先看  CCCallFunc 类的创建:

CCCallFunc *func = CCCallFunc::create(this, <#SEL_CallFunc selector#>) SEL_CallFunc的定义

typedef void (CCObject::*SEL_CallFunc)(); 由此看出SEL_CallFunc 是个函数指针 指向一个没有函数参数 函数的返回值为void的函数

下面就定义一个这样的函数:

.h文件:

class MainScene:public CCLayer {

private:

    void onCallFun();               //动画执行完 回掉函数

.cpp文件 函数的实现:

void MainScene::onCallFun()

{

    CCLOG("action over");

}

只做了一个打印。。

下面看回掉的具体实现代码:

    //并行执行动画

    CCMoveTo *totototo = CCMoveTo::create(2, ccp(900, 300));

    CCRotateBy *rotate = CCRotateBy::create(2, 3600); //旋转 3600

    CCSpawn *spawn = CCSpawn::create(totototo,rotate,NULL);

//    sprite->runAction(spawn);

    

    //动画执行完后 回掉

    CCCallFunc *func = CCCallFunc::create(this, callfunc_selector(MainScene::onCallFun));

    CCSequence *seq = CCSequence::create(spawn,func,NULL);  //添加到队列

    sprite->runAction(seq);

运行:


可以看到 当动画执行完后 action over 被打印出来。。。



cocos2d-x ios游戏开发初认识(七) 简单的动画,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。