ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • cocos2d-x 정리 2일차
    Pause @/Cocos2d-x2 2013. 6. 24. 20:48

    ●CCSequence

    - 액션의 순서를 정하고 순차적으로 실행한다.


    void HelloWorld::doAction(CCObject* pSender)

    {

    //액션 정의

    CCActionInterval* action1=CCMoveTo::create(2,ccp(100,200));

    CCActionInterval* action2=CCRotateBy::create(2,90);

    CCActionInterval* action3=CCScaleTo::create(2, 2.0);


    CCFiniteTimeAction* seq=CCSequence::create(action1, action2, action3, NULL);


    pMan->runAction(seq);

    }








    ●CCSpawn

    - 등록된 모든 액션을 동시에 시행한다.


    void HelloWorld::doAction(CCObject* pSender)

    {

    //액션 정의

    CCActionInterval* action1=CCMoveTo::create(2,ccp(100,200));

    CCActionInterval* action2=CCRotateBy::create(2,90);

    CCActionInterval* action3=CCScaleTo::create(2, 2.0);


    CCFiniteTimeAction* seq=CCSpawn::create(action1, action2, action3, NULL);


    pMan->runAction(seq);

    }








    ●CCDelayTime

    - 스퀀스(Sequence)로 액션을 등록 떄 일정시간 지연 효과를 준다.


    //doAction 메서드 정의

    void HelloWorld::doAction(CCObject* pSender)

    {

    //액션 정의

    CCActionInterval* action1=CCMoveTo::create(2,ccp(100,200));

    CCActionInterval* action2=CCRotateBy::create(2,90);

    CCActionInterval* action3=CCScaleTo::create(2, 2.0);


    CCFiniteTimeAction* seq=CCSequence::create(action1, CCDelayTime::create(2), action2, action3, NULL);


    pMan->runAction(seq);

    }








    ●CCRepeat, CCRepeatForever

    - CCRepeat는 지정한 횟수만큼 반복시키고, CCRepeatForever는 무한 반복시킨다.


    void HelloWorld::doAction(CCObject* pSender)

    {

    //액션 정의

    CCActionInterval* action1=CCMoveBy::create(2,ccp(100,0));

    CCActionInterval* action2=CCRotateBy::create(2,90);

    CCActionInterval* action3=CCScaleBy::create(2, 2.0);


    CCFiniteTimeAction* seq=CCSequence::create(action1,CCDelayTime::create(2), action2, action3, NULL);


    CCActionInterval* rep=CCRepeat::create(seq, 3); // 무한반복하려면 CCRepeatForever::create(seq);


    pMan->runAction(rep);

    }




    이즈 액션(Ease Action)

    - 전체 액션시간은 수정하지 않고 내부의 액션 속도를 조절한다.


    CCEaseIn - 액션의 끝이 빨라진다.

    CCEaseOut - 액션의 처음이 빨라졌다가 끝이 느려진다.

    CCEaseInOut - 액션의 처음이 느렸다가 중간에 빨라지고 끝에서 느려진다.



    void HelloWorld::doAction(CCObject* pSender)

    {

    //액션 정의

    CCActionInterval* move=CCMoveBy::create(2,ccp(100,0));


    //빨라지기

    CCActionInterval* move_ease_in=CCEaseIn::create(move, 2);

    //느려지기

    CCActionInterval* move_ease_out=CCEaseOut::create(move, 2);

    //빨라졌다 느려지기

    CCActionInterval* move_ease_inout=CCEaseInOut::create(move, 2);

    pMan->runAction(move_ease_in);

    //pMan->runAction(move_ease_out);

    //pMan->runAction(move_ease_inout);

    }









    ●콜백 액션

    - 액션에서 메서드를 호출하는 것이다.

    CCCallFunc 액션에서 메서드를 호출하게 한다. CCCallFuncN은 파라미터로 노드를 삽입한다. CCCallFuncND는 노드와 포인터형 데이터를 파리미터로 사용한다. 액션이 끝나고 어떤 동작을 수행해야 할 때 사용한다.



    - HelloWorldScene.h


    #ifndef __HELLOWORLD_SCENE_H__

    #define __HELLOWORLD_SCENE_H__


    #include "cocos2d.h"


    #include "Box2D/Box2D.h"


    #include "SimpleAudioEngine.h"


    class HelloWorld : public cocos2d::CCLayerColor

    {

    public:

    virtual bool init();


    static cocos2d::CCScene* scene();

    CREATE_FUNC(HelloWorld);


    cocos2d::CCSprite* pMan;

    void doAction(CCObject* pSender);

    void callback1();

    void callback2(CCNode* sender);

    void callback3(CCNode* sender, void* data);

    };


    #endif // __HELLOWORLD_SCENE_H__



    - HelloWorldScene.cpp


    #include "HelloWorldScene.h"


    using namespace cocos2d;


    CCScene* HelloWorld::scene()

    {

    CCScene *scene=CCScene::create();


    HelloWorld *layer=HelloWorld::create();

    scene->addChild(layer);


    return scene;

    }


    // on "init" you need to initialize your instance

    bool HelloWorld::init()

    {

    if(!CCLayerColor::initWithColor(ccc4(255,255,255,255)))

    {

    return false;

    }


    ///////////////////////


    //메뉴 아이템 생성 및 초기화

    CCMenuItemFont* pMenuItem1=CCMenuItemFont::create(

    "Action",

    this,

    menu_selector(HelloWorld::doAction));

    pMenuItem1->setColor(ccc3(0,0,0));

    //메뉴 생성

    CCMenu* pMenu=CCMenu::create(pMenuItem1, NULL);

    //메뉴 위치 지정

    pMenu->setPosition(ccp(240, 50));


    //레이어에 메뉴 객체 추가

    this->addChild(pMenu);



    //Grossini 스프라이트 추가

    pMan=CCSprite::create("Images/grossini.png");

    pMan->setPosition(ccp(50,200));

    this->addChild(pMan);

    return true;

    }


    //doAction 메서드 정의

    void HelloWorld::doAction(CCObject* pSender)

    {

    //Grossini 스프라이트 제거

    pMan->removeFromParentAndCleanup(true);


    //태그로 레이블 제거

    this->removeChildByTag(1, true);

    this->removeChildByTag(2, true);

    this->removeChildByTag(3, true);


    //Grossini 스프라이트 추가

    pMan->CCSprite::create("Images/grossini.png");

    pMan->setPosition(ccp(50,160));


    this->addChild(false);

    pMan->setVisible(false);


    CCFiniteTimeAction* action=CCSequence::create(

    CCPlace::create(ccp(200,200)),

    CCShow::create(),

    CCMoveBy::create(1, ccp(200,0)),

    CCCallFunc::create(this, callfunc_selector(HelloWorld::callback1)),

    CCCallFuncN::create(this, callfuncN_selector(HelloWorld::callback2)),

    CCCallFuncND::create(this, callfuncND_selector(HelloWorld::callback3), (void*)0xbebabeba),

    NULL);

    pMan->runAction(action);

    }


    #pragma mark -

    #pragma mark Callback Functions


    void HelloWorld::callback1(){

    CCLabelTTF *label=CCLabelTTF::create("callback 1 called", "Marker Felt", 16);

    label->setPosition(ccp(120, 160));

    label->setColor(ccBLACK);

    label->setTag(1);

    addChild(label);

    }


    void HelloWorld::callback2(CCNode* sender){

    CCLabelTTF *label=CCLabelTTF::create("callback 2 called", "Marker Felt", 16);

    label->setPosition(ccp(120, 160));

    label->setColor(ccBLACK);

    label->setTag(2);

    addChild(label);

    }


    void HelloWorld::callback3(CCNode* sender, void* data){

    CCLabelTTF *label=CCLabelTTF::create("callback 3 called", "Marker Felt", 16);

    label->setPosition(ccp(120, 160));

    label->setColor(ccBLACK);

    label->setTag(3);

    addChild(label);

    }

    'Pause @ > Cocos2d-x2' 카테고리의 다른 글

    cocos2d-x transition, parallaxnode  (0) 2013.06.30
    cocos2d-x 스케쥴update, CCSpriteBatchNode  (0) 2013.06.30
    cocos2d-x animation 정리  (0) 2013.06.30
    cocos2d-x 터치 및 스케쥴 정리  (0) 2013.06.29
    cocos2d-x 정리..  (0) 2013.06.23
Designed by Tistory.