'CCMultiplexLayer'에 해당되는 글 1건

  1. 2011.09.06 안드로이드 cocos2d 예제 분석강좌 - 첫번째- (메뉴 MenuTest.class)
쏘스를 하나 하나 씹어 먹어 봅시다 . 
일단.  먼저 할것은 Menu 관련 입니다. 
경로는 org.cocos2d.tests 패키지에 MenuTest.class 입니다.  
 @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE); 

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

                WindowManager.LayoutParams.FLAG_FULLSCREEN);

 

        mGLSurfaceView = new CCGLSurfaceView(this);

        setContentView(mGLSurfaceView);

    }
 

requestWindowFeature(Window.
FEATURE_NO_TITLE);
==>타이틀바 를 삭제 합니다. 

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                WindowManager.LayoutParams.FLAG_FULLSCREEN);
==>상태바 (안테나 뜨는 부분을 삭제합니다) 

mGLSurfaceView = new CCGLSurfaceView(this);
setContentView(mGLSurfaceView);
==>CCGLSurfaceView 클래스 GLSurfaceView 를 상속합니다. 
여기에 대해서 말할거리는 정말 많죠 그러나 일단은 성능 좋은 이미지뷰를 화면에
생성 한다 라고 만 알아둡시다 . 추후에 여기에 대해서 장기간에 걸쳐서 강좌를
진행해보겟습니다.  

onCreate() 부분을 간단히 요약하자만 cocos2d를 사용하기 위해서 
View 하나 생성 했다 입니다. 물론 전체 화면이니 나발이니 하는것은
하나의 옵션입니다. 이로써 준비는 끝났습니다. 실제 코드에 슬슬 들어 가보죠  

다음 라이프 싸이클에 따라 

@Override

    public void onStart() {

        super.onStart(); 

        // attach the OpenGL view to a window

        CCDirector.sharedDirector().attachInView(mGLSurfaceView); 

        // set landscape mode

        CCDirector.sharedDirector().setLandscape(false); 

        // show FPS

        CCDirector.sharedDirector().setDisplayFPS(true); 

        // frames per second

        CCDirector.sharedDirector().setAnimationInterval(1.0f / 60); 

        CCScene scene = CCScene.node(); 

        CCMultiplexLayer layer = CCMultiplexLayer.node(new Layer1(),

                                    new Layer2(), new Layer3(), new Layer4());

        scene.addChild(layer, 0);

        CCDirector.sharedDirector().runWithScene(scene);

    }

주석이 참 친절하게 잘되어있네요 . 
CCDirector.sharedDirector().attachInView(mGLSurfaceView);
이전강좌에서 CCDirector의 개념을 잠시 언급한적이 있죠 감독이며 자혼자 뿐이라고 
싱글스톤 입니다. CCDirecto 레퍼런스 변수 생성방법이 바로 요헐게 
CCDirector.sharedDirector() 입니다. 그리고 난후에 위의 onCreate에서 생성했던 성능 좋은 이미지뷰를 감독에게 넘겨줍니다. 전권 위임입니다.  

자그럼 프로그래머 입장에서 보면 감독을 한놈 정하고 그놈에서 전권을 맡긴 것이죠.
코드한줄에 주석이빠이 ㅎ. ㅎㅎ 

CCDirector.sharedDirector().setLandscape(false);
이부분은 감독에서 세로모드로 영화를 찍어라고 하는겁니다
인자값이 true면 당연히 가로 16:9 와이드로 영화를 찍어라고 하는것이죠. 근데 막상 감독이라고 해놓고 보니 아직은 지혼자 할 줄 아는게 없네요 프로그래머가 일일이 지시해야 하고 에휴~~ 이래서 머리 좋은 시다바리를 둬야 한다는 거죠 . ㅎ 자자 각설하고 
다음줄 

CCDirector.sharedDirector().setDisplayFPS(true);
화면 귀퉁이 FPS를 숫자로 보여 줄것인가 말것인가를 감독에게 시킵니다. FPS는 초당 프레임수 초당 화면 갱신을 몇번하는가를 말합니다. 그러면 초당 몇번 보여라고 지정하는부분도 있겟죠 그게 바로 다음줄 
 

CCDirector.sharedDirector().setAnimationInterval(1.0f / 60);
입니다. CCAction 기초강좌 에서도 보았듯이 cocos2d의 시간 단위는 1초입니다.
변수 타입은 float 입니다. 그러니까 1.0f는 1초 0.5f는 0.5초 입니다. 이를
60으로 나누었으니 초당 60번의 화면 갱신이 일어나게끔 한다는것입니다. 일반적인
에니메이션은 24프레임이고 디즈니가 36프레임인가로 알고 있는데 상당히 부드럽자나요 .
그것보다 더 부드럽게 움직이라고 하는겁니다.  실제 화면구동에서는 이보다 속도가 안나올수도있습니다 많이 내려갈때는 30프레임 까지 내려가더군요 . 그래도 상당히 아니 매우 빠른속도니까 화면의 대상은 부드럽게 움직입니다.  

CCScene scene = CCScene.node();
드디어 이제 시작인가요 .ㅎ ㅎ 여기서 강좌끝내버리면 낚시겟죠 ㅎㅎ.
CCScene 인스턴스를 생성하는 방법입니다. 참쉽죠 
CCScene.node();이렇게 클래스명적고 .node()라고 하면 되니까 ㅎ 
이렇게 선언하면됩니다. 


CCMultiplexLayer layer = CCMultiplexLayer.node(new Layer1(),

                            new Layer2(), new Layer3(), newLayer4());

입니다. 레이어 선언이네요 CCLayer를 상속한  CCMultiplexLyer
이름도 거창한 멀티플렉스 전부 아시죠 멀티플렉스영화관 영화관은 영화관인데 기본의 상영관이 1개인 영화관은 한건물에 때려넣은 영화관!

자기 이름도 영화관이면서 안에 1개짜리 영화관을 때려넣고 앞에 멀티플렉스라고 명명한
건물. 여기서도 동일하게 적용됩니다. CCLayer클래스인데 안에 멤버변수(ArryList)로 다른 CCLayer를 담을수 있는 이름도 거창한. CCMultiplexLayer 입니다. 
그러고 보니까 안쪽에 레이어를 쳐담고 있죠 new로 생성해서요 . 

" 어라 cocos2d에 Layer1()이란 클래스가 있었나 ?" 라는 궁긍증일어나겟죠  
결론적으로 없습니다, 걍 다음 소스에서 도 나오겟지만. 예제 만든사람이  CCLaer클래스를 상속하여 만든것뿐입니다. 오해가 없으시길. 

scene.addChild(layer, 0);

CCDirector.sharedDirector().runWithScene(scene);

어라 이제까지 우리가 만들어 놓은 걸 담고 있네요 . 이는 기본강좌 에도 나와 있지만. ^^ (거의 중간 광고 수준이네요 ㅋㅋㅋ 한번쯤 읽어 보라는 압력. ㄷㄷ ) 
CCDirector는 CCScene를 담을수 있고  
CCSecen은 CCLayer를 담을수 있고
CCLayer는 CCSplite를 담을수 있습니다. 

담는 방법은 위에 나와 있습니다.
scene.addChild(layer, 0);==>CCSecen은 CCLayer를 담을수 있고
CCDirector.sharedDirector().runWithScene(scene);==>CCDirector는 CCScene를 담을수 있고
입니다. add든 runWithScene든 결과는 담는 겁니다. 

자이제 화면이 ON 되었습니다. 
그럼 이제 화면이 어떻게 움직일까요? 우리가 보았듯이 이름만 거창한 멀플렉스레이어가 실제 우리 눈에 보이는 부분입니다.
그럼 이놈을 분석해보면 화면이 어떻게 돌아 가는지 알수 있겟죠 ㅎㅎ;


일단 중간 정리 한번하고 가죠 . 
OnCreate()에서 한일은 
1.전체화면 만들기 
2.성능좋은 이미지뷰 생성하기

OnStart()에서 한일은. 
1. 감독을 만들어 성능 좋은이미지 뷰랑 연결해주기 
2. 가로모드 세로모드 결정
3. FPS 정해주기 
4. CCScene와 CCLayer를 생성
5. 그릇 순서에 따라 담기 . 

자 ~~ 기본적인 것 정리는 다됐고  슬슬 또 진행해봅시다.


글중 에 잘못된 부분있다면 이야기 해주세요; ㅎㅎ 

Posted by 수다쟁이증후군 :