Cocos2d-x 动作的管理之ActionManger

前面讲过Node的动作(Action),cocos2d-x中,提供了一个ActionManger,用于管理Action的一些动作,比如停止,暂停等;
一、停止所有动作
实际上,Node节点已经有了一些简单的动作的管理,比如停止Node实例上的所有动作;


    node->stopAllActions(); //
node->runAction(ScaleTo::create(2, 2))

调用node->stopAllActions();
之前的所有动作都将停止,但是,它并影响后续的动作,后续的ScaleTo动作将正常执行;
二、延时执行动作

cocos2d-x中,并没有简单的使用一个接口直接指定某一个动作延时一段时间后执行,但是,这都不是问题,下面是一个延时3s执行动作的例子;


    auto grossini = Sprite::create(s_pathGrossini);
addChild(grossini, 0, 98); // 为sprite指定一个tag
grossini->setPosition(VisibleRect::center() );

auto action = MoveBy::create(1, Vec2(150,0));

auto director = Director::getInstance();
director->getActionManager()->addAction(action, grossini, true);

schedule( schedule_selector(PauseTest::unpause), 3); // 每3秒执行一次unpause方法;

unpause方法实现


    unschedule( schedule_selector(PauseTest::unpause) ); // 停止循环执行unpause方法
auto node = getChildByTag( 98); // 获取sprite实例
auto director = Director::getInstance();
director->getActionManager()->resumeTarget(node); // 开始执行动作

上面的例子通过schedule循环更新的方法,每3s执行一次,当执行的时候,就取消循环来实现动作延时执行的效果;
三、停止动作


void StopActionTest::onEnter()
{
auto pMove = MoveBy::create(2, Vec2(200, 0));
auto pCallback = CallFunc::create(CC_CALLBACK_0(StopActionTest::stopAction,this));
auto pSequence = Sequence::create(pMove, pCallback, NULL);
pSequence->setTag(kTagSequence); // 为动作指定tag

auto pChild = Sprite::create(s_pathGrossini);
pChild->setPosition( VisibleRect::center() );

addChild(pChild, 1, kTagGrossini);
pChild->runAction(Sequence::create(ScaleTo::create(3.0f,2.0f), NULL));
pChild->runAction(pSequence);

}

void StopActionTest::stopAction() // 停止动作
{
auto sprite = getChildByTag(kTagGrossini); // 通过tag获取sprite
sprite->stopActionByTag(kTagSequence); // 停止sprite上的指定的tag的动作
}

停止Node的某一个动作简单来说,就是预先给动作指定一个tag,在要停止它的时候,通过stopActionByTag(tag)来停止它;
四、Resume动作


void ResumeTest::onEnter()
{

auto pGrossini = Sprite::create(s_pathGrossini);
addChild(pGrossini, 0, kTagGrossini);
pGrossini->setPosition(VisibleRect::center());

pGrossini->runAction(ScaleBy::create(2, 2));

auto director = Director::getInstance();

director->getActionManager()->pauseTarget(pGrossini);// @1
pGrossini->runAction(RotateBy::create(2, 360));
this->schedule(schedule_selector(ResumeTest::resumeGrossini), 3.0f);
}

void ResumeTest::resumeGrossini(float time)
{
this->unschedule(schedule_selector(ResumeTest::resumeGrossini));

auto pGrossini = getChildByTag(kTagGrossini);
auto director = Director::getInstance();
director->getActionManager()->resumeTarget(pGrossini);
}

@1:在上面的代码中,pauseTarget方法调用之后,又再次调用了runAction,那它会不会先执行这个动作呢?实际上,是不会的(亲测),所以,我大胆的解释为pauseTarget之后,需要调用resumeTarget之后,才会执行Node实例自身的未完成的动作;

完!

Cocos2d-x 动作的管理之ActionManger,布布扣,bubuko.com

时间: 2024-10-01 02:21:35

Cocos2d-x 动作的管理之ActionManger的相关文章

MVC与单元测试实践之健身网站(四)-动作管理

网站后台负责进行动作的管理,包括动作名称.介绍.训练要点.配图等内容,以便前台能够使用这些内容.在上一篇< Fit项目图片上传和云存储的调通>中已经准备好了这里涉及到的主要技术难点,现在就开始完成该模块了. 一 列表介绍 健身管理模块包括肌群.肌肉的显示以及动作的管理.这儿也算是开始涉及"业务内容"了,还好我之前有储备了一些关于健身的资料,现在是时候派上另一种用场了. a) 肌群和肌肉因为内容相对固定,所以为了减少业务逻辑以及单元测试的代码量,当然最主要是为了偷懒,就只提供

Cocos2d之Ref类与内存管理使用详解

一.简介 用C++和JAVA编写过程序的朋友一定会为两种语言不同的内存管理机制懊恼.JAVA程序运行在JVM之上,由JVM自动实现内存管理,开发者只管申请内存而不用手动释放内存.当JAVA中对象没有被任何引用变量(类似于C和C++的指针)引用时,JVM会将对象释放掉.C++和C一样,是编译后能够直接被操作系统执行的语言,没有虚拟机负责其内存管理,因此需要在程序中管理内存.本文主要介绍如何使用cocos2d提供的内存管理机制. Cocos2d-x借鉴了“引用计数”思想,实现了一定程度上的自动内存管

cocos2d 内存管理

-- 不要怕,勇敢的迈出第一步,加油!!!!!-- 此章介绍cocos2d 中的内存管理 1. cocos2d 中的所有Node类都继承于Ref,Ref中有引用计数的概念,如下: class TestRef  : public Ref { public: TestRef() {} virtual ~TestRef() {} }; new TestRef -- 这时class Ref 中的_referenceCount = 1 retain -- _referenceCount++ release

Cocos2D中Action的进阶使用技巧(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 大家对Cocos2d中动作的使用大概都非常清楚了,事实上本身action的概念也不复杂. 可是在某些情况下,一般的动作不能满足我们需求的时候,我们就必须使用更高级的Action方法来解决这个问题. 比方,串行化(不是序列化哦,这是两个全然不同的概念)不同Action的执行-有些童鞋可能会说非常easy,直接用CCActionSequence不就结了,可是等等我

cocos2d::Value

cocos2d::Value 于v3.0beta加入 定义在"COCOS2DX_ROOT/cocos/base"的头文件"CCValue.h"中 class Value; cocos2d::Value是许多基本类型(int,float,double,bool,unsigned char,char*和std::string)还有std::vector<Value>, std::unordered_map<std::string,Value>和s

Cocos2d之cocos2d::Value实例分享

于v3.0beta加入 定义在"COCOS2DX_ROOT/cocos/base"的头文件"CCValue.h"中.推荐教程Cocos2d-x从零开始视频教程 class Value; cocos2d::Value是许多基本类型(int,float,double,bool,unsigned char,char*和std::string)还有std::vector, std::unordered_map和 std::unordered_map这些类的包装类型. 你可以

【Cocos2d入门教程四】Cocos2d-x菜单篇

游戏世界多姿多彩,无论多靓丽的游戏,多耐玩的游戏,在与游戏用户交互上的往往是菜单. 上一章我们已经大概了解了导演.节点.层.精灵.这一章以菜单为主题. 菜单(Menu)包含以下内容: 1.精灵菜单项(MenuItemSprite) 2.图片菜单项(MenuItemImage) 3.文字菜单项(MenuItemFont) 4.标签菜单项(MenuItemLabel) 4.开关菜单项(MenuItemToggle) 菜单的继承关系: 这里图片菜单项也是同样继承于精灵菜单下.图片菜单项也可称为精灵菜单

cocos2d-x 动作类

动作类是Action IntervalAction是间隔动作,InstantAction是瞬时动作. 动作的管理是要由节点负责的,任何的节点都可以管理节点,如精灵.菜单.层.甚至场景都可以管理动作.节点管理动作的相关方法如下: do(template_action).执行动作 action_remove(worker_action).中断动作 pause().暂停动作 resume().继续执行所有动作 stop().停止所有动作 are_actions_running().是否有真在执行的动作

18、Cocos2dx 3.0游戏开发找小三之cocos2d-x,请问你是怎么调度的咩

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478251 Cocos2d 的一大特色就是提供了事件驱动的游戏框架, 引擎会在合适的时候调用事件处理函数,我们只需要在函数中添加对各种游戏事件的处理, 就可以完成一个完整的游戏了. 例如,为了实现游戏的动态变化,Cocos2d 提供了两种定时器事件: 为了响应用户输入,Cocos2d 提供了触摸事件和传感器事件: 此外,Cocos2d 还提供了一系列