-
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