본문 바로가기
프로그래밍/cocos2d-x

cocos2d-x 액션3

by -현's- 2013. 5. 29.
반응형



이즈 액션(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);

}










반응형

'프로그래밍 > cocos2d-x' 카테고리의 다른 글

cocos2d-x 애니메이션  (0) 2013.05.31
cocos2d-x 트랜지션(Transition) 추가,삭제,교체  (0) 2013.05.30
cocos2d-x 액션2  (0) 2013.05.28
cocos2d-x 액션1  (0) 2013.05.28
cocos2d-x 메뉴  (0) 2013.04.27

댓글