저번 정리에서는 CCNode에 대해서 알아 봤는데요 그놈이 대충 먼지알았으니까 그놈에 속성을 변경시키는 CCAction에 대해서 알아봅시다.

 

음 본격적으로 알아 보기전에 액션관련 클래스는 얼마나 몇 개나 있을까 하는 궁금함이 들어서확인해봤습니다.


관련 패키지만 8 클래스는 113 .  이런 씨부.~~~진짜 많네


org.cocos2d.actions  (5
)

org.cocos2d. base (5

org.cocos2d.actions. camera (2)

org.cocos2d.actions. ease (22)

org.cocos2d.actions. grid (17)

org.cocos2d.actions. instant(10)

org.cocos2d.actions. interval(28)

org.cocos2d.actions. tile(14)


더럽게 많네요  ㄷㄷ
자 그럼 본격적으로 가보죠 

위에 분류는 패키지별 분류입니다.

홈피에서는 분류는 속성을 기준으로 하여 분류해놓았더군요.

§  position

§  CCMoveBy

§  CCMoveTo

§  CCJumpBy

§  CCJumpTo

§  CCBezierBy

§  CCBezierTo

§  CCPlace

§  scale

§  CCScaleBy

§  CCScaleTo

§  rotation

§  CCRotateBy

§  CCRotateTo

§  visible

§  CCShow

§  CCHide

§  CCBlink

§  CCToggleVisibility

§  opacity

§  CCFadeIn

§  CCFadeOut

§  CCFadeTo

§  r, g, b

§  CCTintBy

§  CCTintTo

 

그럼 가장 첫번째 있는 position 속성을 변화 시키는 CCMoveBy 클래스를 보도록 하겟습니다.

기본액션 이라길래 org.cocos2d. base (5)에 있는줄 알고 차아 보니까 없더군요.. 머지 했습니다 그래서 다시 살펴보니 .
org.cocos2d.actions. interval(28
) 패키지에 있었습니다. 이것도 머지 했죠 . 머지 머지 ? 인터발 이면 시간인데.. 아하 위치 변경할 때도 시간을 줄수 있구나 . 오호 ~~~ 이런 세심한 배려까지 . ㄷㄷ 그래서나머지 부분들도 찾아 보았습니다. 결론은 basic Action중에서 

§  CCPlace

§  CCShow

§   CCHide   

§ CCToggleVisibility

요기 4가지는 org.cocos2d.actions.instant(10)있었습니다. 인스턴스는 일회적이란는 말인데 음....일회적 아니 빠른 순간적 이라는 말인가 ?
그럼
시간속성이 없다라는 말은 순간적으로 이루어 진다 시작 ~ ! 하면 바로 끝난다. 해서

CCInstantAction 

간단하죠 ㅎㅎㅎ 그렇다는 말은 홈피에서 말하는 기본액션중
위에 4가지만 쓰는 방법(함수형식) 다르고 나머지 들은 거의 같다 라는 이상한 결론이 도출되네요 .

그럼 실제로 비슷한지 코드를 한번 볼까요?  

CCMoveTo actionTo = CCMoveTo.action(2, CGPoint.ccp(s.width-40, s.height-40));
CCMoveBy actionBy = CCMoveBy.action(2, CGPoint.ccp(80,80));
CCJumpTo actionTo = CCJumpTo.action(2, CGPoint.ccp(300,300), 50, 4);

CCJumpBy actionBy = CCJumpBy.action(2, CGPoint.ccp(300,0), 50, 4);



CCBezierConfig bezier =
new CCBezierConfig();

bezier.controlPoint_1 = CGPoint.ccp(0, s.height/2);

bezier.controlPoint_2 = CGPoint.ccp(300, -s.height/2);

bezier.endPosition = CGPoint.ccp(300,100);

CCBezierBy bezierForward = CCBezierBy.action(3, bezier);

CCBezierConfig bezier2 = new CCBezierConfig();

bezier2.controlPoint_1 = CGPoint.ccp(100, s.height/2);

bezier2.controlPoint_2 = CGPoint.ccp(200, -s.height/2);

bezier2.endPosition = CGPoint.ccp(240,160);

CCBezierTo bezierTo1 = CCBezierTo.action(2, bezier2);

 

CCScaleTo actionTo = CCScaleTo.action(2, 0.5f);

CCScaleBy actionBy = CCScaleBy.action(2, 2);


CCRotateTo actionTo = CCRotateTo.action(2, 45);

CCRotateBy actionBy = CCRotateBy.action(2, 360);


CCBlink action1 = CCBlink.action(2, 10);

CCFadeIn action1 = CCFadeIn.action(1.0f);

CCFadeOut action1Back = action1.reverse();

CCFadeOut action2 = CCFadeOut.action(1.0f);

CCFadeIn action2Back = action2.reverse();

CCFadeTo action1= CCFadeTo.action1 (2, 3)


CCTintTo action1 = CCTintTo.action(2, ccColor3B.ccc3(255, 0, 255));

CCTintBy action2 = CCTintBy.action(2, ccColor3B.ccc3(-127, -255, -127));

 

오호 비슷하네요 파라미터로 2개를 가지구요.

첫번째는 시간관련 (참고로 데이터 형은 float )이구요

두번째 파라미터는 각속성과 관련된 변수(레퍼런스)들 입니다 

 

이렇게 보니까 간단하게 보이는건 저뿐인가요 ^^;; 아 참고로 한가지 더

시간 관련 파라미터의 단위는 (첫번째 파라미터) “ 입니다.

1 이라고 있으면 1초이고 0.5 0.5초입니다.

 

자그럼 시간이 포함된 기본액션 클래스들을 보았으니 시간 변수가 표함 기본액션들을 살펴 보겟습니다.시간이 포함안되어있으니까 시간 관련 파라미터는 없겟고 기본액션이니까 하나의 속성을 변화 시키는거니까 음.. 그럼 파라미터는 한 개 겟네 ? 라고 생각할수 있습니다.  과련 맞을까요?


그럼 살펴봅시다
.

CCPlace.action(CGPoint.ccp(200,200))

CCShow.action()

CCHide hide = CCHide.action();

CCToggleVisibility tog1 = CCToggleVisibility.action();

 

어라 CCPlace 말고는 파라미터가 없네요 . 이런젠장.

Show Hide로 묶으면 파라미터 하라고 주고 보여줄지 말지를 묶을수 있는데 ㅠ 그러면

ToggleVisibility 묶을수도 있었는데 ㅠㅠ 예상이 빛나가버렸네요 .

이건 cocos2d 있는 코드니까 예측이 빛나갔더라고 실망하지말자궁 ㅠㅠ. 그래도 반은 대충 맞추었자나요 ㅠㅠ  아그러고 보니 jump 인자값이 4개네요 시간 포지션 간격 횟수

이정도 ㅠㅠ아 젠장 페이드인이랑 페이드 아웃도 인자 값이 하나네요ㅠㅠ. 가만히 생각해보니까 인자 하나만 있으면 되네요. 어차피 사라질꺼 시간만 있으면 되는거였네요 . 생각보다 많이 빗나가는뎁쇼 ㅈㅅ. ㅠㅠ

 

 

.. 한가지 중요한 것을 빼먹었네요. 클래스 뒤에 By To 의미가 먼지 궁금하실수도 있겟네요. 이건 바로 절대값 상대값 차이입니다.

By = 상대적 개념
To = 절대적 개념


절대값이라
하면 기준을 0으로 한거구요 위치면 0,0이겟고  회전은 0 scale 이미지 기본사이즈에서 얼마만큼 커지던지 작아 지던지가 되게네요.

그럼 상대값은 준을 자기 자기 위치면 현재위치 회전은 현재 회전된 값부터 scale 조금 애매하긴하네 .
 
 

그리고 재밌는 것은 By To 상속해서 만들었다는 것입니다. 잘생각 해보면 To 기분 이미지정해져 있다는 것뿐이지 실제적인  처리는 By 같다는 거죠 . 다시 말해서

절대적이함은 절대적 기준은 가진다는 결국 기본값이 정해져있다라는 말고 동일하죠 .이걸 디폴트라고 하죠 ㅎㅎ. 이제 어느정도 정리가 되어 가나요?

 

 

마지막으로 cocos2d에서 재밌는 기능을 가진 것이 있네요.

바로 reverse 액션 현재 까지 변화시킨 속성을 반대로 되돌린다 것인데도 쓰는 법도 간단합니다.

action 클래스 변수에 대고 점하나 찍고 reverse라고 써주기만 하면됩니다.  

 

CCFadeOut action2 = CCFadeOut.action(1.0f);

CCFadeIn action2Back = action2.reverse();

 

이렇게요 . ㅋㅋ 쉽죠 ㅎ 

 이로써  기본 액션 Base Action에 대해서 정리 되었습니다.


자 마무리하자면
Action Node의 속성을 변화 시키는 것이다. 그리고

그 속성별로 액션을 구체화 하여 각족 Action 파생클래스를 만들어 쓰기 쉽게 만든것이다.

라고 하면 될까요 ㅎㅎ

 

자 이제 액션을 사용할 Node를 어떻게 선언하는지만 알면 실제 액션 사용 코드를 볼수 있겟네요. ㅎㅎㅎ 

오호 ~~` 그런데 기왕 액션에 온거 단일액션만 보지말고 액션조합 어떻게 하는지 보고 갈까요?


그럼 이제 우리가 알아 보았던 액션들을
  결합해봅시다.

액션을 순차적으로 진행 할수 있고

액션을 모아서 한번에 같이 진행할수 있고 . 

그리고 이런 것들을 몇번이나 반복할것인지 한번 ? 두번? 세번? 무한히?

그것들이 바로

§  Sequence action

§  Spawn action

§  Repeat action

§  RepeatForever action

입니다.

CCSequence  이렇게 사용합니다.

CCMoveBy move_tamara = CCMoveBy.action(1, CGPoint.ccp(100,0));

CCMoveBy move_tamara2 = CCMoveBy.action(1, CGPoint.ccp(50,0));

CCHide hide = CCHide.action();

CCSequence seq_tamara = CCSequence.actions(move_tamara, hide, move_tamara2);

 

CCSpawn 요렇게 사용하구요

CCAction action = CCSpawn.actions(

CCJumpBy.action(2, CGPoint.ccp(300,0), 50, 4),

CCRotateBy.action(2, 720));

CCRepeat 이러구요

CCRotateTo act1 = CCRotateTo.action(1, 90);

CCRotateTo act2 = CCRotateTo.action(1, 0);

CCSequence seq = CCSequence.actions(act1, act2);

CCRepeat rep2 = CCRepeat.action(seq, 10);


CCRepeatForever 도 있네요  
CCRepeatForever rep1 = CCRepeatForever.
action(seq);

 

추가로 액션의 복사 copy() 있습니다.

CCMoveBy a1 = CCMoveBy.action(1, CGPoint.ccp(150,0));

CCRepeatForever action2 = CCRepeatForever.action(

                           CCSequence.actions( a1.copy(), a1.reverse()));

 

이까지가 기본적인 액션에 대한 이해 였습니다.

자자 이제 슬슬 CCNode 선언 하러 가볼까요

Posted by 수다쟁이증후군 :