zoukankan      html  css  js  c++  java
  • [Cocos2d-x For WP8]Action 常用动作

        Action相当于是Cocos2d-x里面的动画操作,在Cocos2d-x里面的动画基类是CCAction类,从CCAction类派生出来的就有很多常用的动作的实现类,利用这些类就可以给我们游戏的精灵实现丰富的动作效果,类似于我们在WP8里面使用各种各样的动画类实现动画效果一样。那么下面就是这些类的结构图:

    官方的技术文档可以参考下面的地址:

    http://www.cocos2d-x.org/reference/native-cpp/d7/d12/classcocos2d_1_1_c_c_action.html

    那么从上图可以看到Cocos2d-x提供了很多基本的动作类,主要包括两大类:一类是瞬时动作(CCActionInstant),一类是延时动作(CCActionInterval)。

    瞬时动作CCActionInstanse是没有执行过程,动作瞬间就执行完成了;CCActionInterval则是执行需要一个过程,跟我们编写的普通程序的动画一样的原理。下面我们主要介绍下延时动作,延时动作有下面这些:移动(CCMoveTo/CCMoveBy)、缩放(CCScaleTo/CCScaleBy)、旋转(CCRotateTO/CCRotateBy)、扭曲(CCSkewTo/CCSkewBy)、跳跃(CCJumpTo/CCJumpBy)、贝塞尔曲线(CCBezierTo/CCBezierBy)、闪烁(CCBink)、淡入淡出(CCFadeIn/CCFadeOut)、染色(CCTintTo/CCTintBy)等,我们也可以把上面这些动作的几个组合成一个序列来执行,多种效果混合在一起。

    下面是一些代码的实例:

    //在init方法里面初始化当前的实例
    bool RotateWorldTest::init()
    {
        bool bRet = false;
    
        do 
        {
            //CCLayer进行初始化,初始化失败跳出循环
            if ( !CCLayer::init() )
            {
                break;
            }
            //获取手机屏幕的大小
            CCSize size = CCDirector::sharedDirector()->getWinSize();
            //创建图片精灵
            CCSprite *sprite = CCSprite::create("cat.png");
            sprite->setPosition(ccp(size.width * 0.5, size.height * 0.5));
            sprite->setScale(1.5f);
            this->addChild(sprite);
            //移动
            //从当前的位置到新的位置
            CCActionInterval*  actionMoveTo = CCMoveTo::create(2, ccp(size.width-40, size.height-40));
            sprite->runAction( actionMoveTo);
            //从当前的位置递增到另外的位置,然后再返回
            CCActionInterval*  actionMoveBy = CCMoveBy::create(2, ccp(80,80));
            CCActionInterval*  actionMoveByBack = actionMoveBy->reverse();
            sprite->runAction( CCSequence::create(actionMoveBy, actionMoveByBack, NULL));
    
            //缩放
            CCActionInterval*  actionScaleTo = CCScaleTo::create(2.0f, 0.5f);
            sprite->runAction( actionScaleTo);
            CCActionInterval*  actionScaleBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);
            sprite->runAction( CCSequence::create(actionScaleBy, actionScaleBy->reverse(), NULL));
    
            //倾斜
            CCActionInterval *actionSkewTo = CCSkewTo::create(2, 37.2f, -37.2f);
            sprite->runAction( actionSkewTo);
            CCActionInterval *actionSkewBy = CCSkewBy::create(2, 0.0f, -90.0f);
            sprite->runAction(actionSkewBy);
    
             //旋转
            CCRotateTo* actionRotateTo = CCRotateTo::create(2, 37.2f, -37.2f);
            sprite->runAction( actionRotateTo);
            CCRotateBy* actionRotateBy = CCRotateBy::create(2, 0.0f, -90.0f);
            sprite->runAction( actionRotateBy);
    
            //跳跃
            CCActionInterval*  actionJumpTo = CCJumpTo::create(2, ccp(300,300), 50, 4);
            sprite->runAction( actionJumpTo);
            CCActionInterval*  actionJumpBy = CCJumpBy::create(2, ccp(300,0), 50, 4);
            CCActionInterval*  actionJumpByBack = actionJumpBy->reverse();
            sprite->runAction( CCSequence::create(actionJumpBy, actionJumpByBack, NULL));
            CCActionInterval*  actionJumpUp = CCJumpBy::create(2, ccp(0,0), 80, 4);
            sprite->runAction( CCRepeatForever::create(actionJumpUp));
    
            //贝塞尔曲线运动
            ccBezierConfig bezier;
            bezier.controlPoint_1 = ccp(0, size.height/2);
            bezier.controlPoint_2 = ccp(300, -size.height/2);
            bezier.endPosition = ccp(300,100);
            CCActionInterval*  bezierForward = CCBezierBy::create(3, bezier);
            CCActionInterval*  bezierBack = bezierForward->reverse();    
            CCAction*  rep = CCRepeatForever::create(CCSequence::create( bezierForward, bezierBack, NULL));
            sprite->runAction( rep);
    
            sprite->setPosition(ccp(80,160));
            ccBezierConfig bezier2;
            bezier2.controlPoint_1 = ccp(100, size.height/2);
            bezier2.controlPoint_2 = ccp(200, -size.height/2);
            bezier2.endPosition = ccp(240,160);
            CCActionInterval*  bezierTo1 = CCBezierTo::create(2, bezier2);    
            sprite->runAction(bezierTo1);
    
            sprite->setPosition(ccp(400,160));
            CCActionInterval*  bezierTo2 = CCBezierTo::create(2, bezier2);
            sprite->runAction(bezierTo2);
    
            //闪烁效果
            CCActionInterval*  actionBlink1 = CCBlink::create(2, 10);
            sprite->runAction( actionBlink1);
    
            //淡出淡入
            CCActionInterval*  actionFadeIn1 = CCFadeIn::create(1.0f);
            CCActionInterval*  action1FadeInBack = actionFadeIn1->reverse();
            sprite->runAction( CCSequence::create( actionFadeIn1, action1FadeInBack, NULL));
            CCActionInterval*  actionFadeOut2 = CCFadeOut::create(1.0f);
            CCActionInterval*  actionFadeOut2Back = actionFadeOut2->reverse();
            sprite->runAction( CCSequence::create( actionFadeOut2, actionFadeOut2Back, NULL));
    
            //色彩
            CCActionInterval*  actionTint1 = CCTintTo::create(2, 255, 0, 255);
            sprite->runAction( actionTint1);
            CCActionInterval*  actionTint2 = CCTintBy::create(2, -127, -255, -127);
            CCActionInterval*  actionTint2Back = actionTint2->reverse();
            sprite->runAction( CCSequence::create( actionTint2, actionTint2Back, NULL));
        
            //接收界面的的触摸事件
            setTouchEnabled(true);
    
            bRet = true;
        } while (0);
        //返回成功
        return bRet;
    }

    把代码复制到Hello World项目里面,就可以看到相关的运行效果了。

  • 相关阅读:
    linux服务器上无root权限如何安装nodejs?
    Jupyter按tab键无法补全,而且报错TypeError: __init__() got an unexpected keyword argument 'column'的解决办法
    通过损失函数优化提高训练速度、准确性和数据利用率
    华为诺亚AutoML框架-Vega:(2) 代码结构
    华为诺亚实验室AutoML框架-Vega:(1) 介绍
    AutoML: A survey of the state-of-the-art综述期刊论文免费下载
    安装Docker 图形界面管理工具 -- Portainer
    Dockfile 编写示例(将 jar 制作成容器)
    Docker 常用命令集
    云服务器CentOS安装Docker
  • 原文地址:https://www.cnblogs.com/linzheng/p/3269022.html
Copyright © 2011-2022 走看看