首页 > 代码库 > Cocos2d-X中的CCAction

Cocos2d-X中的CCAction

CCAction用于创建各种动作


CCAction类及其子类的结构图:

程序实例1:创建一个延时性动作

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();

    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");

    //设置精灵的位置(精灵运动的起始位置)
    sprite->setPosition(ccp(480,320));
    addChild(sprite);

    //延迟性动作
    //第一个参数:精灵运动所花的时间
    //第二个参数:精灵运动的终止位置
    CCAction* moveTo = CCMoveTo::create(10, ccp(0,0));
    sprite->runAction(moveTo);

    return true;
}

执行结果:


程序实例2:创建一个立即性动作

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();

    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");

    //设置精灵的位置(精灵运动的起始位置)
    sprite->setPosition(ccp(480,320));
    addChild(sprite); 

    //立即性动作
    CCPlace* place = CCPlace::create(ccp(0,0));
    sprite->runAction(place);

    return true;
}

程序实例3:动作的顺序封装(先执行延迟性动作,后执行立即性动作)

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();

    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");

    //设置精灵的位置(精灵运动的起始位置)
    sprite->setPosition(ccp(480,320));
    addChild(sprite);
    
    //延迟性动作(持续一段时间的动作)
    //第一个参数:精灵运动所花的时间
    //第二个参数:精灵运动的终止位置
    CCMoveTo* moveTo = CCMoveTo::create(2, ccp(0,0));

    //立即性动作
    CCPlace* place = CCPlace::create(ccp(100,100));

    //动作的顺序封装
    CCSequence* seq = CCSequence::create(moveTo, place, NULL);
    sprite->runAction(seq);

    return true;
}

执行结果:



程序实例4:动作的并发封装(延迟性动作和立即性动作一起执行)

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();

    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");

    //设置精灵的位置(精灵运动的起始位置)
    sprite->setPosition(ccp(100,100));
    addChild(sprite);
    
    //延迟性动作(持续一段时间的动作)
    //第一个参数:精灵运动所花的时间
    //第二个参数:精灵运动的终止位置
    CCMoveTo* moveTo = CCMoveTo::create(10, ccp(0,0));

    //立即性动作
    CCPlace* place = CCPlace::create(ccp(100,100));

    //动作的并发封装
    CCSpawn* spawn = CCSpawn::create(moveTo, place, NULL);
    sprite->runAction(spawn);

    return true;
}


执行结果:



程序实例5:动作反转

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();

    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");

    //设置精灵的位置(精灵运动的起始位置)
    sprite->setPosition(ccp(200,200));
    addChild(sprite);
    
    //动作反转(从ccp(100,100)-ccp(200,200)-ccp(100,100))
    CCMoveBy* moveBy = CCMoveBy::create(10, ccp(100, 100));
    
    CCAction* moveBack = moveBy->reverse();
    
    CCAction* action = CCSequence::create(moveBy, moveBack, NULL);
    
    sprite->runAction(action);

    return true;
}

执行结果:


程序实例6:精灵跳跃

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();

    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");

    //设置精灵的位置(精灵运动的起始位置)
    sprite->setPosition(ccp(100,100));
    addChild(sprite);
    
    //精灵跳跃
    //第一个参数:完成跳跃所花的时间
    //第一个参数:跳跃到的位置
    //第一个参数:跳跃的高度
    //第一个参数:跳跃的次数
    CCJumpBy* jumpBy = CCJumpBy::create(10, ccp(-100,-100), 80, 5);
    sprite->runAction(jumpBy);

    return true;
}


执行结果:



程序实例7:精灵旋转

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();

    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");

    //设置精灵的位置(精灵运动的起始位置)
    sprite->setPosition(ccp(100,100));
    addChild(sprite);
    
    //精灵旋转
   CCRotateBy* rotateBy = CCRotateBy::create(10, 360);
   sprite->runAction(rotateBy);

    return true;
}


执行结果:



程序8:sequence的动作反转

#include "Action.h"

CCScene* Action::scene()
{
    CCScene* scene = CCScene::create();

    Action* layer = Action::create();

    scene->addChild(layer);

    return scene;
}

bool Action::init()
{
    CCLayer::init();
    
    //创建精灵
    CCSprite* sprite = CCSprite::create("CloseNormal.png");
    sprite->setPosition(ccp(200, 200));
	addChild(sprite);	

	//sequence的动作反转
	CCMoveBy* moveBy = CCMoveBy::create(2, ccp(100, 100));
	CCJumpBy* jumpBy = CCJumpBy::create(2, ccp(-100, -100), 80, 5);
	CCRotateBy* rotateBy = CCRotateBy::create(2, 180);

	CCSequence* seq = CCSequence::create(moveBy, jumpBy, rotateBy, NULL);
	CCSequence* seq2 = CCSequence::create(seq, seq->reverse(), NULL);

	//动作执行无限次
	sprite->runAction(CCRepeatForever::create(seq2));
	
    return true;
}

执行结果:





Cocos2d-X中的CCAction