本系列学习教程使用的是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实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
Cocos2D-X开发学习笔记-动作类之基础动作的使用示例(下) 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9840757
Cocos2D-X开发学习笔记-动作管理类的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10007849
Cocos2D-X开发学习笔记-按键事件使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10040985
Cocos2D-X开发学习笔记-动作类之摄像机动作和基本样条动作的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9851099
Cocos2D-X开发学习笔记-触屏事件使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10029143
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
Cocos2D-X开发学习笔记-音乐和音效的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10228941
Cocos2D-X开发学习笔记-网格动作类的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10011991
自己记录的Cocos2d-x学习笔记,希望能够帮助新手,快速入门,掌握cocos2d-x的开发
Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...
Cocos2D-X开发学习笔记-游戏数据存储项目实例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10857813
Cocos2D-X开发学习笔记-时间调度schedule函数的使用 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9749457
Cocos2D-X开发学习笔记-动作类之基础动作的使用示例(上) 项目中包含:源码、效果图 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9774103
在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...
Cocos2D-X开发学习笔记-游戏数据存储项目实例(下) 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10946695
Cocos2D-X开发学习笔记-渲染框架之图形的绘制 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9748001
Cocos2D-X开发学习笔记-渲染框架之布景层类的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9397075
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
Cocos2D-X开发学习笔记-渲染框架之菜单类的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9626051