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;
}

执行结果:







时间: 2024-10-10 00:00:41

Cocos2d-X中的CCAction的相关文章

如何在Cocos2D游戏中实现A*寻路算法(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 该篇博客由iOS课程团队的Johann Fradj发布,他现在是一个全职开发iOS的开发者.他是Hot Apps Factory(其是App Cooker的创造者)的共同创建

cocos2D(九)---- CCAction

之前介绍CCNode的时候说过,动作是指在特定时间内完毕移动.缩放.旋转等操作的行为,节点能够通过执行动作来实现动画效果,这里的动作就是指CCAction对象,它有非常多的子类,每一个子类都封装了不同的动作效果. 先来看看CCAction的继承结构图 这里我省略了瞬时动作(CCActionInstant)和间隔动作(CCActionInterval)的子类,由于它们又包括了许多的子类.待会再介绍它们的子类. CCAction和CCFiniteTimeAction都是抽象类,仅仅定义了一些基本属性

如何在Cocos2D游戏中实现A*寻路算法(三)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 创建开放和闭合列表 接下来我们将使用2个NSMutableArray来跟踪保存我们的开放和闭合列表. 你可能奇怪为什么不用NSMutableSet代替.好吧,这里有2个原因:

如何在Cocos2D游戏中实现A*寻路算法(五)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 跟随着黄色砖块前进 现在我们已经找到了我们的路径,我们只需要让猫咪跟随它. 我们接下来要做的是记住整个路径,并且使得猫咪根据路径一步一步的移动. 在CatSprite.h中建

如何在Cocos2D游戏中实现A*寻路算法(八)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 就拿上图中左上角的情况举个栗子. 这只猫咪想要从原点(O)到左下角的对角线方块中去.如果在左边或底下(或全部都有)有墙壁并且测试穿过对角线将会切入一个墙角(或2个).所以左下

cocos2d JS 中的数组拼接与排序

1 var arrA = [];//创建三个局部变量的新数组 2 var arrB = []; 3 var arrC = []; 4 var newCards = this.MyMahjong;//创建一个新的局部变量等于一个全局变量的数组:并把里面的内容依次拆开再全部拼接 5 for(var t=0;t<newCards.length;t++){ 6 var char = newCards[t].charAt(0); 7 if(char == "a"){ 8 arrA.push

关于 Android ios cocos2d 中的广播监听

1. 关于广播监听 第一次使用是在Android中,broadcast.主要用在2个activity之间进行传递数据,发出一个广播,对这个广播有兴趣的就去监听它,做出相应的回应即可.主要是传递数据,触发机制比较好,跟全局变量或者单例有点像,但是使用场合有区别,比如2个activity之间传递数据,activity这种有生命周期的弄成全局变量和单例就不合适了. 2.Android的广播 发送广播: Intent intent = new Intent("OUR_BLE_CENTRAL_MANAGE

Cocos2d坐标系转换

Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系(高中数学里面那种). 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系. 屏幕坐标系和Cocos2d坐标系 标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系. iOS, Android, Windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下. Cocos2d坐标系和OpenG

Cocos2d之Texture2D类详解之将文件加载成Texture2D对象

一.声明 笔者以cocos2d框架cocos2d-x-3.3rc0版本的源码做分析.本文为笔者原创,允许转载和分享,只要注明文章出处即可. 二.简介 Texture2D类简介 Texture2D类允许开发者用图像.文本信息和简单的数据来创建OpenGL2D纹理.被创建的纹理拥有两个维度.根据开发者创建Texture2D对象方式的不同,实际图像的尺寸可能比生成的纹理的尺寸要小,而且纹理的内容是倒置的. 像素格式 在计算机图形学中,人们用每个像素在内存中的总位数以及分别存储红.蓝.绿和alpha(阿