2016년 12월 30일 금요일
오후12:40
- 액션
auto spr = Sprite::create("Image.png");
spr->setPosition(Point(50, 50)); // 시작점
this->addChild(spr);
auto action = MoveTo::create(1.0, Point(450, 50)); // 끝점
spr->runAction(action);
By 와 To 의 차이
By : 상대적 수치
To : 절대적 수치
종류
MoveBy, MoveTo, JumpBy, JumpTo, BezierBy, BezierTo, Place
ScaleBy, ScaleTo
RotateBy, RotateTo
Show, Hide, Blink, ToggleVisibility
FadeIn, FadeOut, FadeTo
TintBy, TintTo
JumpBy, JumpTo
auto action = JumpBy::create(3.0, Point(300, 0), 50, 10); // (300, 0)을 향해 3초간 이동, 50의 높이로 10번 점프
spr->runAction(action);
BezierBy, BezierTo
ccBezierConfig bc;
bc.controlPoint_1 = Point(200, 250);
bc.controlPoint_2 = Point(400, 150);
bc.endPosition = Point(450, 50);
auto action = BezierTo::create(3.0, bc); // ccBezierConfig에 따라 3초간 이동
spr->runAction(action);
Place
auto action = Place::create(Point(100,100)); // (100, 100)에 위치 시킨다
spr->runAction(action);
ScaleBy, ScaleTo
auto action = ScaleTo::create(2.0, 3.0); // 2초간 3배 확대
spr->runAction(action);
RotateBy, RotateTo
기본적으로 입력한 각도가 + 일경우 시계방향으로 회전.
RotateBy의 경우 입력한 각도대로 회전을 하지만 RotateTo의 경우 가까운 방향으로 회전을 한다.
auto action = RotateBy::create(2.0, 450); // 2초간 450도 회전
spr->runAction(action);
Show
setVisible의 값을 true로 변경해주는 액션.
Hide
setVisible의 값을 false로 변경해주는 액션.
ToggleVisibility
setVisible의 값을 반대로 변경해주는 액션.
Blink
지정된 횟수만큼 객체를 깜빡이게 하는 액션.
FadeIn
투명도를 0에서 255로 변하게 하는 액션.
FadeOut
투명도를 255에서 0으로 변하게 하는 액션.
FadeTo
지정된 투명도로 변하게 하는 액션.
TintBy, TintTo
지정한 RGB 색으로 색상을 변하게 하는 액션.
auto action = TintTo::create(3.0, 255, 0, 0); // 3초간 빨간색으로
spr->runAction(action);
- 응용 액션
Sequence
2개 이상의 액션을 순차적으로 실행해주는 액션.
꼭 마지막에는 NULL값을 넣어줘야한다.
auto action1 = TintTo::create(3.0, 255, 0, 0);
auto action2 = TintTo::create(3.0, 0, 255, 0);
auto action3 = TintTo::create(3.0, 0, 0, 255);
auto seqActn = Sequence::create(action1, action2, action3, NULL);
spr->runAction(seqActn);
Spawn
2개 이상의 액션을 동시에 실행해주는 액션.
사용법은 Sequence와 같다.
Reverse
입력된 액션을 반대로 하는 액션.
대부분 By로 끝나는 액션에 적용해야 제대로 된 액션을 얻을 수 있다.
auto action_0 = MoveBy::create(2.0, Point(300, 100));
auto action_1 = action_0->reverse();
auto action_2 = Sequence::create(action_0, action_1, NULL);
spr->runAction(action_2);
DelayTime
auto action_1 = DelayTime::create(2.0); // 2초간 대기
Repeat, RepeatForever
auto action1 = MoveBy::create(2.0, Point(300, 100));
auto action2 = action1->reverse();
auto actionS = Sequence::create(action1, action2, NULL);
auto actionR = Repeat::create(actionS, 5); // 5번 반복
spr->runAction(actionR);
EaseIn, EaseOut, EaseInOut
언제 해당되는 액션이 적용되는지에 따라 in, out, inout으로 구분되어있다.
Ease는 액션의 속도를 느리게 해주는 액션이다. EaseIn 액션은 액션의 속도를 앞부분에서 느리게 했다가 뒷부분으로 갈수록 빠르게 변화하는 액션.
비율의 값을 조절할 수 있으며 그 값이 커질수록 속도의 차이가 많이 나게 된다.
auto action1 = MoveBy::create(2.0, Point(300, 100));
auto action2 = action1->reverse();
auto actionS = Sequence::create(action1, action2, NULL);
auto actionE = EaseIn::create(actionS, 3.f); // 앞부분에서만 느리고 Sequence의 뒷부분으로 갈수록 빨라진다.
spr->runAction(actionE);
EaseSineIn, EaseSineOut, EaseSineInOut
속도의 차이가 적은 Ease 액션이다.
EaseExponentialIn, EaseExponentialOut, EaseExponentialInOut
속도의 차이가 큰 Ease 액션이다.
EaseElasticIn, EaseElasticOut, EaseElasticInOut
고무줄처럼 튕기는 효과를 주는 Ease 액션이다. 초기값과 도착지점에서 앞뒤로 떨림이 있다.
auto actionE = EaseElasticIn::create(action);
EaseBackIn, EaseBackOut, EaseBackInOut
뒤로 이동했다가 목표지점으로 이동을 하는 액션이다.
auto actionE = EaseBackIn::create(action);
EaseBounceIn, EaseBounceOut, EaseBounceInOut
공이 튕기는 듯한 느낌을 주는 액션이다.
auto actionE = EaseBounceOut::create(action);
CallFunc, CallFuncN
메소드를 호출하는 액션. CallFunc 액션은 매개변수가 없는 콜 펑션이며 , CallFuncN 액션은 매개변수로 받을 수 있는 콜 펑션이다.
샘플 메소드를 생성한다.
void HelloWorld::setCallFunc_0()
{
CCLOG("HelloWorld::setCallFunc_0()");
}
void HelloWorld::setCallFunc_1(Ref *sender)
{
CCLOG("HelloWorld::setCallFunc_1()");
}
void HelloWorld::setCallFunc_2(Ref *sender, void *d)
{
CCLOG("HelloWorld::setCallFunc_2()");
}
void HelloWorld::setCallFunc_3(Ref *sender, Ref *object)
{
CCLOG("HelloWorld::setCallFunc_3()");
}
매개변수 없이 메소드 호출의 예
auto action_0 = MoveTo::create(3.0, Point(400, 100));
auto action_1 = DelayTime::create(3.0);
auto action_2 = CallFunc::create(CC_CALLBACK_0(HelloWorld::setCallFunc_0, this));
auto action_3 = Sequence::create(action_0, action_1, action_2, NULL);
spr->runAction(action_3);
실행 객체를 받는 CallFunc의 예
auto action_2 = CallFuncN::create(CC_CALLBACK_1(HelloWorld::setCallFunc_1, this));
실행 객체와 추가로 spr_2를 받는 예
auto spr = Sprite::create("ball.png");
spr->setPosition(Point(100, 100));
this->addChild(spr);
auto spr_2 = Sprite::create("ball.png");
spr_2->setPosition(Point(200, 200));
this->addChild(spr_2);
auto action_0 = MoveTo::create(3.0, Point(300, 100));
auto action_1 = DelayTime::create(1.0);
auto action_2 = CallFuncN::create(CC_CALLBACK_1(HelloWorld::setCallFunc_3, this, spr_2));
auto action_3 = Sequence::create(action_0, action_1, action_2, NULL);
spr->runAction(action_3);
CC_CALLBACK_1 으로 사용한다. 특정 값을 전달한다고 하더라도 실행하는 객체에서 값을 입력하는것이 아니기때문에 CC-CALLBACK_2를 사용하지 않는다고 한다.
[Cocos2d-x 3 모바일 게임 프로그래밍] 의 내용을 정리.
댓글 없음:
댓글 쓰기