Cocos2d-x人物动作类实例(3)
接下来介绍CCAction的另外来个子类,CCFollow实现镜头跟随的效果,类似于我们在横版过关游戏中看到的人物永远在屏幕中间,而背景在移动,不过它们的实
接下来介绍CCAction的另外来个子类,CCFollow实现镜头跟随的效果,类似于我们在横版过关游戏中看到的人物永远在屏幕中间,而背景在移动,不过它们的实现具体是不是靠这个类就不知道了。CCSpeed可以实现快进和慢放的效果,就是改变了执行的速度。以下是源代码。
void HelloWorld::move(CCObject* pSender) { //通过tag获得添加的精灵 CCSprite * sprite = (CCSprite *)this->getChildByTag(0); CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender; //创建如下几个动作 CCMoveBy * move = CCMoveBy::create(2.0,ccp(100,0)); CCRotateBy * rotate = CCRotateBy::create(2.0,720); CCFiniteTimeAction * moveBack = move->reverse(); CCFiniteTimeAction * rotateBack = rotate->reverse(); CCFlipY * flip = CCFlipY::create(true); //同步动作序列,传入的几个动作同时执行,执行的整个时间是最长的一个动作的执行时间,参数类型是CCFiniteTimeAction //传入的动作(动作的实质就是改变节点的属性)所影响的属性不要有冲突 CCSpawn * spawn = CCSpawn::create(move,rotate,NULL); CCSpawn * spawnBack = CCSpawn::create(moveBack,rotateBack,NULL); //顺序动作序列,传入的几个动作按照传入的顺序顺序执行,执行的整体时间是所有动作的时间之和 CCSequence * sequence = CCSequence::create(move,rotate,flip,NULL); CCSequence * sequenceBack = CCSequence::create(moveBack,rotateBack,flip->reverse(),NULL); //CCFollow实现一个节点跟随一个节点运动,传入的参数是要跟随的节点 CCFollow * follow = CCFollow::create(sprite); //执行这个动作的是要跟随的节点,一般是层,效果累世于横版过关游戏中的场景 this->runAction(follow); if(toggleMenu->getSelectedIndex() == 1) { sprite->runAction(spawn); //sprite->runAction(sequence); } else if(toggleMenu->getSelectedIndex() == 0) { sprite->runAction(spawnBack); //sprite->runAction(sequenceBack); } }
以下是CCSpeed的实现,在上述代码的基础上做了一点修改。
void HelloWorld::move(CCObject* pSender) { //通过tag获得添加的精灵 CCSprite * sprite = (CCSprite *)this->getChildByTag(0); CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender; //创建如下几个动作 CCMoveBy * move = CCMoveBy::create(2.0,ccp(100,0)); CCRotateBy * rotate = CCRotateBy::create(2.0,720); CCFiniteTimeAction * moveBack = move->reverse(); CCFiniteTimeAction * rotateBack = rotate->reverse(); CCFlipY * flip = CCFlipY::create(true); //同步动作序列,传入的几个动作同时执行,执行的整个时间是最长的一个动作的执行时间,参数类型是CCFiniteTimeAction //传入的动作(动作的实质就是改变节点的属性)所影响的属性不要有冲突 CCSpawn * spawn = CCSpawn::create(move,rotate,NULL); CCSpawn * spawnBack = CCSpawn::create(moveBack,rotateBack,NULL); //顺序动作序列,传入的几个动作按照传入的顺序顺序执行,执行的整体时间是所有动作的时间之和 CCSequence * sequence = CCSequence::create(move,rotate,flip,NULL); CCSequence * sequenceBack = CCSequence::create(moveBack,rotateBack,flip->reverse(),NULL); //CCFollow实现一个节点跟随一个节点运动,传入的参数是要跟随的节点 CCFollow * follow = CCFollow::create(sprite); //执行这个动作的是要跟随的节点,一般是层,效果累世于横版过关游戏中的场景 this->runAction(follow); //CCSpeed分装了一个动作类,第二个参数是要改变的速度的倍数 CCSpeed * speed1 = CCSpeed::create(spawn,2.0); CCSpeed * speed2 = CCSpeed::create(spawnBack,2.0); if(toggleMenu->getSelectedIndex() == 1) { sprite->runAction(speed1); //sprite->runAction(sequence); } else if(toggleMenu->getSelectedIndex() == 0) { sprite->runAction(speed2); //sprite->runAction(sequenceBack); } }
精彩图集
精彩文章