码迷,mamicode.com
首页 > 其他好文 > 详细

Cocos2d-x 学习笔记1 - ActionManager

时间:2014-10-26 19:43:14      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   for   strong   sp   

// Example 1
// Move from center of the screen by [150, 0], and then scale by 2 when moving is done
// The difference between MoveTo & MoveBy is the absolute position or delta postion
// The rest of the code is pretty much self-explained.
void
LogicTest::onEnter() { ActionManagerTest::onEnter(); auto grossini = Sprite::create(s_pathGrossini); addChild(grossini, 0, 2); grossini->setPosition(VisibleRect::center()); grossini->runAction( Sequence::create( MoveBy::create(1, Vec2(150,0)), CallFuncN::create(CC_CALLBACK_1(LogicTest::bugMe,this)), nullptr) //1 is the duration, the 2nd arg is the delta postion ); } void LogicTest::bugMe(Node* node) { node->stopAllActions(); node->runAction(ScaleTo::create(2, 2));//The first 2 is the duration ,the second is the scale factor }

 

//Example2:
//Wait 5 seconds then do the action(move in this case)
void
PauseTest::onEnter() { ActionManagerTest::onEnter(); auto l = Label::createWithTTF("After 5 seconds grossini should move", "fonts/Thonburi.ttf", 16.0f); addChild(l); l->setPosition(VisibleRect::center().x, VisibleRect::top().y-75); // // Also, this test MUST be done, after [super onEnter] // auto grossini = Sprite::create(s_pathGrossini); addChild(grossini, 0, kTagGrossini);//kTagGrossini is a enum, which equals to 0 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 is the num of times should be called within one second } void PauseTest::unpause(float dt) { unschedule( schedule_selector(PauseTest::unpause) );//Unschedule the custom selector auto node = getChildByTag( kTagGrossini );//fetch by tag auto director = Director::getInstance(); director->getActionManager()->resumeTarget(node); }

 

//Example 3
// Multiple actions & repeatforever & scheduleonce
void StopAllActionsTest::onEnter()
{
    ActionManagerTest::onEnter();
    
    auto l = Label::createWithTTF("Should stop scale & move after 4 seconds but keep rotate", "fonts/Thonburi.ttf", 16.0f);
    addChild(l);
    l->setPosition( Vec2(VisibleRect::center().x, VisibleRect::top().y - 75) );
    
    //Action1(Sequence)
    auto pMove1 = MoveBy::create(2, Vec2(200, 0));
    auto pMove2 = MoveBy::create(2, Vec2(-200, 0));
    auto pSequenceMove = Sequence::createWithTwoActions(pMove1, pMove2);
    auto pRepeatMove = RepeatForever::create(pSequenceMove);
    pRepeatMove->setTag(kTagSequence);//Each action is assigned with a unique label
    
    //Action2(Sequence)
    auto pScale1 = ScaleBy::create(2, 1.5);
    auto pScale2 = ScaleBy::create(2, 1.0/1.5);
    auto pSequenceScale = Sequence::createWithTwoActions(pScale1, pScale2);
    auto pRepeatScale = RepeatForever::create(pSequenceScale);
    pRepeatScale->setTag(kTagSequence);
    
    //Action 3
    auto pRotate = RotateBy::create(2, 360);
    auto pRepeatRotate = RepeatForever::create(pRotate);//will repeat forever unless stopaction is called

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

    //Run all three actions
    pChild->runAction(pRepeatMove);
    pChild->runAction(pRepeatScale);
    pChild->runAction(pRepeatRotate);
    //4 is the delay time, which means the selector will be called 4 seconds after the animation
    //this applies in such cases when the action is set as RepeatForever
    this->scheduleOnce((SEL_SCHEDULE)&StopAllActionsTest::stopAction, 4);
}

 

//Example4
//Pause and resume
void ResumeTest::onEnter()
{
    ActionManagerTest::onEnter();

    auto l = Label::createWithTTF("Grossini only rotate/scale in 3 seconds", "fonts/Thonburi.ttf", 16.0f);
    addChild(l);
    l->setPosition(VisibleRect::center().x, VisibleRect::top().y - 75);

    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);//the SPRITE(not action) is paused 
    pGrossini->runAction(RotateBy::create(2, 360));

    this->schedule(schedule_selector(ResumeTest::resumeGrossini), 3.0f);// resumeGrossini will be called 3 seconds later
}

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

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

 

Cocos2d-x 学习笔记1 - ActionManager

标签:style   blog   color   io   os   ar   for   strong   sp   

原文地址:http://www.cnblogs.com/YiranXie/p/4052554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!