1. 정의 스프라이트 별거 없습니다 그냥 2D이미지입니다.단지 용어가 익숙하지 않을뿐. 다시 반복하자면 에스. 피. 엘. 아이. 티. 이s p r i t e스프라이트.2D 이미지 간단히 사진이라 그림,글자 그림 이라고 생각하시면 됩니다.
==>cocos2d 를 배우는 이유가 화면에 이미지띄우고 왔다리 갔다리 하기위한거니까
생성방법은 숙지하세요... 사실 숙지고 머고간에 너무 간단해서 그냥 한번만 보면되요 ㅎ
==> 위와 같이 동일하게 파일 이름을 이용하지만 CGRect.make(top,left,bottm,rigth) 를 이용하여 이미지 파일의 특정영역으로 부터 CCSprite 객체를 생성합니다. ==> CGRect 클래스는 간단하게 자바클래스 RectF클래스와 유사하다고 생각해주세요 바로 보실분들은 보세요^^;;
package org.cocos2d.types;
publicclass CGRect {
public CGPoint origin;
public CGSize size;
public CGRect() {
this(0, 0, 0,
0);
}
public CGRect(final CGPoint origin, final CGSize
size) {
자 그럼 이제 무었이 필요할까요?
제목에서도 나와 있듯이 메뉴를 누르고 소리나고 난뒤에 다른 어플리케이션이 먼가 해주어야겟죠. 그대표적인 예가 다른장면. 메뉴를 눌렀으면 그에 합당한. 다른 화면이 나와워야고 생각합니다. 그장면 전환도 그냥 하는게 아니고 먼사 쌈박한게 해주면 좋겟죠 화려하게 ㅎㅎㅎ
그럼 이제 우리가 알아야 할것은 2가지입니다.
첫번째 : 장면전환 방법과
두번째 : 장면전환 효과
이렇게 2가지입니다.
그럼 그 첫번째 장면 전환 방법입니다.기본개념강좌에서 보앗듯이
장면 즉 Scene를 관리하는것은 Direction입니다. 그럼 Direction에 보면 장면
전환에 관련된 함수들이 있을거라고 예상할수 있죠.
실제 소스를 찾아보니 .
// Director
CCScene Management
/**Enters
the Director's main loop with the given CCScene.
* Call it to run only your FIRST CCScene.
* Don't call it if there is already a
running CCScene.
*/
publicvoid runWithScene(CCScene CCScene) {
assert CCScene != null : "Argument
must be non-null";
assertrunningCCScene_ == null : "You
can't run a CCScene if another CCScene is running. Use replaceCCScene or
pushCCScene instead";
pushScene(CCScene);
//startAnimation();
}
/**
Replaces the running CCScene with a new one. The running CCScene is terminated.
*
ONLY call it if there is a running CCScene.
*/
publicvoid replaceScene(CCScene CCScene) {
assert CCScene != null : "Argument
must be non-null";
int index = CCScenesStack_.size();
sendCleanupToCCScene_ = true;
CCScenesStack_.set(index -
1, CCScene);
nextCCScene_ = CCScene;
}
/**Suspends
the execution of the running CCScene, pushing it on the stack of suspended
CCScenes.
* The new CCScene will be executed.
* Try to avoid big stacks of pushed
CCScenes to reduce memory allocation.
* ONLY call it if there is a running
CCScene.
*/
publicvoid pushScene(CCScene CCScene) {
assert CCScene != null : "Argument
must be non-null";
sendCleanupToCCScene_ = false;
CCScenesStack_.add(CCScene);
nextCCScene_ = CCScene;
}
/**Pops
out a CCScene from the queue.
* This CCScene will replace the running
one.
* The running CCScene will be deleted.
*If there are no more CCScenes in the stack the execution is terminated.
* ONLY call it if there is a running
CCScene.
*/
publicvoid popScene() {
assertrunningCCScene_ != null : "A
running CCScene is needed";
CCScenesStack_.remove(CCScenesStack_.size() - 1);
int c = CCScenesStack_.size();
if (c == 0) {
end();
} else {
nextCCScene_ = CCScenesStack_.get(c - 1);
}
}
위와 같이 있더군요 .
runWithScene , replaceScene , pushScene , popScene runWithScene는 Scene를 시작하는거니까 일단패스
replaceScene 오케이 교체 요거 일단 접수.
어라 근데 push,pop 오호 ~~~ director는 Scene 관리는 스택 개념으로
하는구나 . ㅎㅎㅎ 좋았어
그리고 생각해봅시다.
장면의 전환을 할 때 2가지 경우가 있습니다.(이전과 이후 )
1. 이전 장면의 데이터를 보관해야 할때!(ex 게임중간에 설정으로 전환)
==>pushScene and popScene
2. 이전 장면의 데이터를 보관안해도 될때(ex 메뉴에서 게임 화면의로의 전환)
==>replaceScene 으로 사용하면 되겟네요 ㅎㅎ
두번째 장면 전환 효과입니다.
이것도 어떨때 어떻게 사용하라고 정의하면 좋겟지만 이거야 만들고 싶은 사람 마음니까
머라고 정의 할 수 없겟네요. 한가지 느낌점은 장면 전환이 Action과 상당히 유사성이 많게 보입니다. 실제 어떤 장면전화효과는 액션을 몇가지 썩어 놓기만 했네요. 비록 30 여개의 장면전환클래스가 있다지만 이것만이 전부가 아니겟지요. 일단 하나하나 테스트 해보세요 . 그리고 나서 자신만의 장면 정환 효과를 만들어 본다면 상당히 재미있을듯합니다.
아참 그전에 한가지 정리 할고 갈것이 있네요. 바로
CCScene에 장면효과를 주는 것이 아니고 장면효과를 가지는 CCScene(CCTransitionScene)를 만든다는것입니다. 언듯 보면 말장난 같지만 이 두가지의 차지점은 상당히 큽니다.
자그럼 시간이 포함된 기본액션 클래스들을 보았으니 시간 변수가 표함 기본액션들을 살펴 보겟습니다.시간이 포함안되어있으니까 시간 관련 파라미터는 없겟고 기본액션이니까 하나의 속성을 변화 시키는거니까 음.. 그럼 파라미터는 한 개 겟네 ? 라고 생각할수 있습니다.과련 맞을까요?
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 개념인데 왜있는거지 . ㄷㄷㄷ
위에궁금한 사항들을 제외한 나머지 속성들은 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 를 상속한다. 입니다.
1.sprite 스프라이트 별거 없습니다 그냥 이미지입니다. 단지 용어가 익숙하지 않을뿐. 다시 반복하자면 에스. 피. 알. 아이. 티. 이s p r i t e 스프라이트.2D 이미지 간단히 사진이라 그림,글자 그림 이라고 생각하시면 됩니다. 이는 물론 이동 회전 크기 Action(에니메이션)을 적용가능한니다. 한마디로 사진을 밀었다 땡겻다 돌렸다 뒤집었다 할수 있다는 말이죠
2.Layer 두번째로 할 것은 레이어 입니다. 레이어는간단히 종이 한장입니다. 물론 이 종이는 투명한 비닐 종이 일수도 있도 시커먼 먹지일수 도 있으며 새하얀 종이일수도 있습니다. 여기 이 종이 위에 사진을 붙일수 있겟죠 즉 위에 서 설명한스. 프 .라. 이. 트 를 레이어 위에 배치할수 있다는 거죠즉 레이어는 스프라이트를 포함한다라고 정의해보겟습니다. 공식페이지서 설명한대로 게임 작업은 여기서 대부분에 시간을 보내게 됩니다.
3.Scene 그리고 3번째로 장면이라고 해석해놓은 scene !! Scene는 바로 레이어를 담는 그릇입니다. 하나의 scene에 하나의 레이어도 올수 있고 다수의 레이어가 올라 갈수도 있습니다.
지금까지의 배용을 정리하면 스프라이트는 레이어에 포함되고 레이어는 Scene에 포함된다 라고 할 수 있습니다.
4.Director 자 마지막으로 디렉터는 간단하게 Scene를관리합니다. 이scene 뒤에는 다음 씬이 나오고 다음 씬나오면 그다음씬 나오고 어라 생각해보나까 역순으로 돌리는 게 낮겟네 해서 씬순서 바꾸고… 한마디로감독이죠 그리고 영화에서 감독은 한명입니다. cocos2D에서도 디렉터는 하나분입니다. 프로그램 디자인에서 말하는 싱글톤.~~~
자 여기까지가 기본 개념입니다. 이제 세부 적으로들어가 봅시다. 물론 다음 강좌에서ㅎㅎ 아직 내용이 좀 허접합니다. ㅎ