액션에 대해서 본격적인 작업이 진행 되네요.
공식 홈페이지에 이렇게 정의 되어 있습니다.
-Action이란-
액션은 한 CCNode
오브젝트에 명령을 내리는 것과 같습니다.
보통 position
, rotation
, scale
등과 같이 객체의 속성을 변경합니다.
근데 여기서 문제점. CCNode가 무엇인지를 모른다는 거죠 객체의 속성을 바꾼다라는 말이다 이해할수있으니 . 다른말로 풀자면 CCNode 오브젝트의 속성을 변경시키는행위(코드,API)를 말한다라고 할수 있습니다.
그러나 여전히 CCNode가 모르긴 마찬가지네요
그래서 검색 cocos2d소스를 보니
org.cocos2d.nodes 패키지안에 있더군요.
그럼 CCNode 가보겟습니다.
CCNode는 mainelement로써 대부분 클래스의 최상위 클래스 라네요 java 에서 object클래스와유사 한듯 보입니다.
물론 CCNode도 object 클래스를상속받지만. 정확히 하자는 것이 아니라 개념적으로 최상위 클래스 라는 이야기를 하고자 한말입니다.
CCNode 클래스는 최상위 클래스 이다 라는 말은 클래스적인 측면측면 봤을 때 하는 이야기 이고 그럼 이놈이 도대체 어던놈인가에 대한 물음은 여전히 남네요.
그래서 CCNode 클래스 설명을 다시 보게되네요.
Anything thats gets drawn or contains things that get drawn is a CCNode.
(화면에 그려지거나) (그려지는 것을 포함하는 것) 이 CCNode 이다.
음…그려지는 건 머 글자나 이미지 이런것이겟고 이런 것을 포함하는게레이어 니까(이해가 안되신다면 이전강의를 참고-클릭하시면 새창으로 볼수 있습니다. )
CCSplite 클래스와CCLayer 클래스를 상속하는 모든 클래스 가CCNode이다.(이말은 oop에서 is a 관계네요. 작가는 사람이다. 작자는 하위클래스 사람은 상위클래스)
2개를 합치면 화면에 그려지는 것들과 그것을 포함하는 것은 CCNode클래스를상속한다 이네요.(영어 한줄에 대한 주석이 몇줄이니 ㅠㅠ)
이정도면 감을 잡으셨을라나 ㅎㅎ 우리가 화면에 그려지는 것을 좀더 깔끔하고 쉽게 하기위해서 cocos2d를 쓰는 것이니까 이제 대해서 좀더 상세히 살펴볼필요가 있겟네요.
CCNode 클래스위 주요특징 3가지
1.-1
They can contain other CCNode nodes (addChild, getChildByTag, removeChild, etc)
CCNode는 다른 CCNode를 포함할수 있다. 당연한 말이죠 정의에서 이미 화면에 그려지는것과 그것을 담을수 있는 것이CCNode 라고 했으니까 그러니까 패스
1-2.
They can schedule periodic callback (schedule,unschedule, etc)
주기적으로 콜백 호출할수 있다
이말은 걍 타이머네요. 여기서 콜백은 내부적으로
CCScheduler 클래스가 관리합니다. 소스를 하나 하나 따라 들어가면좋겟지만 일단 개념만 잡읍시다. cocos2d를 사용하는게 편하자고 하는거지 이걸공부하자고 하는건 아니자나요. 너무 깊게 파고 들어가면 주객이 전도 되어 버릴듯하네요. 물론 잘사용하기 위해서는 내부적으로어떻어 돌아가는 것을 알면좋지만 말입니다. 이는 나중에 시간되는 대로 소스 분석해서 봅시다. 아니면 궁금하면 질문해주세요. 제가 분석가능한내로 설명해드릴께요. 일단 일정시간마다 특정행동을 할수 있다 이정도만 합시다.ㅎ
1-3.
They can execute actions (runAction, stopAction, etc)
액션을 실행시킬수 있다 . 이제야 글의 제목과 관련있는 부분이 나오네요. action과 node와의 관계 ㅎㅎㅎ 요기서 지금까지 알수있는 내용만으로 정리 한번 하자면
액션은 Node의 속성을 변화 시키고 그 시작은 Node가 한다. 이말은 액션변수를 파라미터로 하는 호출함수가 있다 또는 Node에 액션 변수가 있고 자신이 가지고 있는 액션을 시작하는 함수가 있다.
그럼 CCAction이 CCNode의 속성을변경한다는건데 그 속성이 먼지도 모르는데 어떻게 CCAction을 파악할수 있다는건지 . ㅎㅎ
그럼 이제 속성에 대해서 알아봅시다. 몇가지 있느냐 하면
- position
- scale (x, y)
- skew (x by degrees, y by degrees)
- rotation (in degrees, clockwise)
- CCCamera (an interface to gluLookAt )
- CCGridBase (to do mesh transformations)
- anchor point
- size
- visible
- z-order
- openGL z position
이렇게 11가지 있습니다.
위치 ,크기,기울기,회전각,카메라,메쉬를 위한그리드베이스 ,축 위치,크기,보여줄것인가 말것인가,레이어 순서 ,그리고 좀 이해안되는 z-position 이거는3D 개념인데 왜있는거지 . ㄷㄷㄷ
근데 메쉬가 머야 그리드는 격자무늬인데 이게왜 메쉬란놈이랑 연관되는거야 ?그리고 scale과 size의 차이점은 머지 이런 궁금증이 있을겁니다.
자도 궁금하네요 이게 도대체 멀까요 ㅎㅎㅎ일단은
위에궁금한 사항들을 제외한 나머지 속성들은 CCNode 클래스 정의를다시 생각해보면 충분히 이해가 가리라 생각합니다.
화면에 그려지는것과 그것을 포함하는것 화면에 어디에 그려그려질 것인가?원래 크기를 줄일것인가 말것인가?이미지 좀기울이면안되나? 시계방향으로 좀회전시킬가? 회전시킬때상단 맨위위를 기준으로 할까 아니면 중앙을 기분으로 할까? 이런게 변화된 이미지를 보여줘야하나 ? 잠시 빼버릴까? 최상위레이어를 배경으로 쓰면 어떨까? 등등
화면에 그려지는 것에 대한 속성들을 모두 정리 해놓았습니다.
대충 CCNode가 먼지 감이 오나요? ㅎㅎㅎ
설명이 개떡 같아서 헷갈릴지도 모르지만. 헷갈리는건 질문해주세요 ㅎㅎ
그외에 CCNode의 프로그래밍적 측면을 위한 문구가 있더군요.
Some CCNode nodes provide extra functionality for them or their children.
Subclassing a CCNode usually means (one/all) of:
- overriding init to initialize resources and
schedulecallbacks
- create callbacks to handle the advancement of time
- overriding draw to render the node
이런거라던지.
Order in transformations with grid disabled
-# The node will be translated (position)
-# The node will be rotated (rotation)
-# The node will be skewed (skew)
-# The node will be scaled (scale)
-# The node will be moved according to the camera values (camera)
Order in transformations with grid enabled
-# The node will be translated (position)
-# The node will be rotated (rotation)
-# The node will be skewed (skew)
-# The node will be scaled (scale)
-# The grid will capture the screen
-# The node will be moved according to the camera values (camera)
-# The grid will render the captured screen
요런거 실제 프로그래밍 하면 이런게 더 와닿을지도 모릅니다. 다만이건 음..머랄까 일조의 tip이라고 생각합니다 물론 여기에대해서도 다룰겁니다. 그러나 아직은 개념 잡기 위한거니 다음 예제를 직접 보면서 할수 있을 때 정리해보도록하겟습니다.
휴
~~ CCAction을 알아볼라고했는데 어떻게 CCNode에 대해서 알아보았네요 .근데 무엇에 대한 action인지 에 대해서 모른다면 충분히 사용할수 없다라는 생각에 이렇게 장문의 글이 되고 말았네요. 잊지말것은 화면에 그려지는것과 그것을포함하는 것은 CCNode 를 상속한다. 입니다.