`
810364804
  • 浏览: 819841 次
文章分类
社区版块
存档分类
最新评论

【Cocos2d-X开发学习笔记】第17期:动作类之跟随动作、可调整速度动作以及动作延时的使用

 
阅读更多

本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010


一、跟随动作


跟随动作CCFollow是一个节点跟随另外一个节点的动作。

1、CCFollow的用法

CCFollow * create(CCNode * pFollowedNode,const CCRect & rect = CCRectZero)

作用:创建一个跟随的动作。

参数1:跟随的目标。

参数2:跟随范围,离开范围就不在跟随。

2、示例代码如下所示。

新建Cocos2D-X项目,取名为“CCActionFollow”,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        CC_BREAK_IF(! CCLayer::init());

		//获得尺寸大小
		CCSize s = CCDirector::sharedDirector()->getWinSize();

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

		//设置精灵的位置
        m_grossini->setPosition(ccp(-200, s.height/2));  

		//添加精灵到图层
		addChild(m_grossini, 1);

		CCActionInterval* move = CCMoveBy::create(2, ccp(s.width * 3, 0));
		CCActionInterval* move_back = move->reverse();
		CCSequence* seq = CCSequence::create(move, move_back, NULL);
		CCAction* rep = CCRepeatForever::create(seq);

		m_grossini->runAction(rep);

		this->runAction(CCFollow::create(m_grossini, CCRectMake(0, 0, s.width * 2 - 100, s.height)));

        bRet = true;
    } while (0);

    return bRet;
}

定义第一个参数是要跟随的节点,第二个参数是运动的边界。如果没有传入边界,则视为没有边界。


3、示例效果图。

运行过程中的效果,可以看出屏幕跟随精灵的移动而移动,而固定不动的菜单项已经由于相对运动移除屏幕。



二、可调整速度动作


可调整速度动作CCSpeed不是一个独立的动作,可以把它理解为是对目前动作的“包装”,经过这个“包装”以

后,就可以实现“慢动作”和“快进”的效果,使用CCSpeed来处理很方便。

1、CCSpeed的用法

CCSpeed* create(CCActionInterval * pAction,float fSpeed)

作用:让目标动作运行速度加倍。

参数1:目标动作。

参数2:倍速。


2、项目示例

出自TestCpp项目的ActionEaseTest.cpp文件中SpeedTest类的onEnter函数和altertime函数。

void SpeedTest::onEnter()
{
    EaseSpriteDemo::onEnter();
    
    CCSize s = CCDirector::sharedDirector()->getWinSize();

    // rotate and jump
    CCActionInterval *jump1 = CCJumpBy::create(4, ccp(-s.width+80, 0), 100, 4);
    CCActionInterval *jump2 = jump1->reverse();
    CCActionInterval *rot1 = CCRotateBy::create(4, 360*2);
    CCActionInterval *rot2 = rot1->reverse();
    
    CCSequence* seq3_1 = CCSequence::create(jump2, jump1, NULL);
    CCSequence* seq3_2 = CCSequence::create( rot1, rot2, NULL);
    CCSpawn* spawn = CCSpawn::create(seq3_1, seq3_2, NULL);
    CCSpeed* action = CCSpeed::create(CCRepeatForever::create(spawn), 1.0f);
    action->setTag(kTagAction1);
    
    CCAction* action2 = (CCAction*)(action->copy()->autorelease());
    CCAction* action3 = (CCAction*)(action->copy()->autorelease());

    action2->setTag(kTagAction1);
    action3->setTag(kTagAction1);
    
    m_grossini->runAction(action2);
    m_tamara->runAction(action3);
    m_kathia->runAction(action);
    
    this->schedule(schedule_selector(SpeedTest::altertime), 1.0f);//:@selector(altertime:) interval:1.0f];
}

void SpeedTest::altertime(float dt)
{    
    CCSpeed* action1 = (CCSpeed*)(m_grossini->getActionByTag(kTagAction1));
    CCSpeed* action2 = (CCSpeed*)(m_tamara->getActionByTag(kTagAction1));
    CCSpeed* action3 = (CCSpeed*)(m_kathia->getActionByTag(kTagAction1));
    
    action1->setSpeed( CCRANDOM_MINUS1_1() * 2 );
    action2->setSpeed( CCRANDOM_MINUS1_1() * 2 );
    action3->setSpeed( CCRANDOM_MINUS1_1() * 2 );
}

在onEnter函数中,就是定义普通动作,并使用schedule,使得每1.0s调用altertime函数。在altertime函数中,通过

getActionByTag获得动作,把它们视作CCSpeed,并使用setSpeed设置速度:设置1,是原速度;大于1,速度加

快,小于1,速度减慢。

3、示例效果图

可以看出,刚开始未调用altertime函数时,三个精灵的动作步调一致。

调用altertime函数后,动作步调开始不同

三、动作延时


动作延时CCDelayTime就是动作延后一段固定的时间,可以把它理解为一个“空动作”,只有时间,没有任何动作。

1、示例代码如下所示。


首先新建项目,取名为“MyCCActionDelayTime”,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {

        CC_BREAK_IF(! CCLayer::init());

		//获得尺寸大小
		CCSize s = CCDirector::sharedDirector()->getWinSize();

		//创建精灵
		CCSprite* m_grossini = CCSprite::create("grossini.png");
		
		//设置精灵的位置
		m_grossini->setPosition(ccp(60, s.height/2));

		//添加精灵到图层
		addChild(m_grossini, 1);

        CCActionInterval*  move = CCMoveBy::create(1, ccp(150,0));
		CCFiniteTimeAction*  action = CCSequence::create( move, CCDelayTime::create(2), move, NULL);

		m_grossini->runAction(action);

        bRet = true;
    } while (0);

    return bRet;
}

它一般要放入CCSequence动作序列中才能看到效果。定义它也很简单,参数为间隔时间。

2、示例效果图。

动作执行到这里会停顿两秒钟。

两秒钟之后移动到如下图所示的位置。

源码下载地址

分享到:
评论

相关推荐

    Cocos2D-X开发学习笔记-动作类之基础动作的使用示例(下)

    本文主要围绕Cocos2D-X中的基础动作类的使用进行深入探讨。 一、基础动作介绍 基础动作是Cocos2D-X中最基本的动作类型,包括但不限于位移(Move)、旋转(Rotate)、缩放(Scale)、淡入淡出(Fade)和颜色变化...

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    Cocos2d-x学习笔记

    Cocos2d-x框架除了Windows平台外,还支持iOS、Android、Mac OS X、Web等平台,初学者在掌握了Windows平台的开发后,可以进一步学习如何使用Cocos2d-x跨平台开发,实现一个游戏在多个平台上运行。 在学习过程中,...

    Cocos2D-X开发学习笔记-动作管理类的使用示例

    在"Cocos2D-X开发学习笔记-动作管理类的使用示例"中,我们将深入探讨如何有效地利用动作管理类来实现复杂的动画效果。首先,我们需要了解Cocos2d::ActionManager类,它是Cocos2D-X中的核心组件之一,负责存储和执行...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...

    Cocos2D-X开发学习笔记-游戏数据存储项目实例(上)

    在Cocos2D-X游戏开发中,数据存储是不可或缺的一部分,它涉及到游戏进度、用户设置、得分记录等信息的持久化。本项目实例主要探讨如何在Cocos2D-X框架下实现游戏数据的有效存储,以确保游戏在不同会话之间能够保持...

    cocos2d-x学习笔记

    《cocos2d-x学习笔记》 在学习cocos2d-x时,了解其核心组件和工作流程至关重要。AppDelegate是cocos2d-x框架中的一个关键类,它扮演着应用程序入口点的角色,处理应用程序的生命周期事件。让我们深入探讨...

    Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整

    综上所述,从文件信息中可以提取到的知识点主要涉及Cocos2d-x游戏开发框架、使用JavaScript进行游戏开发、以及电子书的下载、阅读体验和版权问题。另外,还涉及到了电子书资源的获取服务以及对应的联系方式。需要...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...

    Cocos2D-X开发学习笔记-动作类之摄像机动作和基本样条动作的使用示例

    Cocos2D-X开发学习笔记-动作类之摄像机动作和基本样条动作的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9851099

    Cocos2d-x实战:C++卷(2版)源代码

    《Cocos2d-x实战:C++卷(2版)源代码》这本书是关于使用Cocos2d-x游戏引擎进行游戏开发的专业指南。Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言...

    Cocos2D-X开发学习笔记-按键事件使用示例

    Cocos2D-X是一款流行的开源游戏开发框架,广泛用于创建2D游戏、应用程序和互动内容。在Cocos2D-X中处理按键事件是游戏交互的重要部分,它允许开发者响应用户的输入,实现游戏逻辑或者界面控制。这篇学习笔记将深入...

    Cocos2D-X开发学习笔记-触屏事件使用示例

    本学习笔记将深入探讨如何在Cocos2D-X中处理触屏事件,让游戏能够响应用户的触摸操作。 首先,我们要了解Cocos2D-X中的触摸事件处理机制。在Cocos2D-X中,触屏事件主要通过`Touch`类和`TouchEvent`类来实现。`Touch...

    Cocos2D-X开发学习笔记-网格动作类的使用示例

    在《Cocos2D-X开发学习笔记-网格动作类的使用示例》教程中,作者yangyu20121224详细讲解了如何在实际项目中运用这些网格动作。通过阅读该教程,你可以了解到如何结合代码实例来实现这些视觉效果,从而提升你的游戏...

    Cocos2d-x实战 JS卷

    《Cocos2d-x实战 JS卷》是一本深入探讨Cocos2d-x游戏开发的专著,主要聚焦于使用JavaScript语言进行游戏编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备和桌面平台,支持iOS、Android、Windows等多...

    Cocos2D-X游戏开发技术精解

     《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    cocos2d-x-3.1.zip

    Cocos2d-x是一个开源的游戏开发框架,广泛用于2D游戏、实时渲染应用程序和其他互动内容的制作。这个压缩包“cocos2d-x-3.1.zip”包含了Cocos2d-x框架的3.1版本,这是一个经典且相对旧的版本,可能对于那些寻找历史...

    cocos2d-x 3.0

    《cocos2d-x 3.0:游戏开发中的角色移动技术详解》 在游戏开发领域,cocos2d-x是一款广泛使用的开源2D游戏引擎,尤其在移动平台上的应用非常广泛。cocos2d-x 3.0版本带来了许多性能优化和新特性,使得开发者能够更...

    Cocos2D-X开发学习笔记-渲染框架之布景层类的使用示例

    本篇学习笔记主要聚焦于Cocos2D-X的渲染框架,特别是布景层类的使用,这对于构建游戏场景至关重要。 首先,我们要理解Cocos2d-x中的“布景层”(CCLayer)。在Cocos2D-X中,布景层是场景(CCScene)的一个子类,...

    Cocos2D-X开发学习笔记-渲染框架之图形的绘制

    Cocos2D-X是一款强大的跨平台2D游戏开发框架,基于C++,并提供了Lua和JavaScript等脚本语言接口。本教程将深入讲解Cocos2D-X中的渲染框架,特别是如何进行图形的绘制,这对于创建游戏场景、角色动画以及用户界面至关...

Global site tag (gtag.js) - Google Analytics