●이즈 액션(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 |
댓글