http://blog.naver.com/arieskmc/110141352568

출처:



android cocos2d 해상도 고정  안드로이드 / MOBILE 

2012/06/25 14:21

복사http://blog.naver.com/arieskmc/110141352568

전용뷰어 보기

iPhone의 경우는 320x480에 맞춰서 작업하면 3GS, 4, 4S에서 문제없이 보여지는데, 

android cocos2의 경우는 단말마다 해상도가 달라서 x,y 좌표의 pixel 작업에 문제가 있어 보인다.


800x1280 화면에 480x800으로 작업하던 소스를 올리면 한쪽으로 몰리는 현상이 생기게 된다. 

현재 화면 사이즈를 가져와서 퍼센트 별 pixel을 계산하여 작업하면 문제가 없겠지만 여간 귀찮은게 아니다. 


Activity의 onCreate에서 sample code대로 아래와 같이 하게 되고,


_glSurfaceView = new CCGLSurfaceView(this);

setContentView(_glSurfaceView);

CCDirector.sharedDirector().attachInView(_glSurfaceView);


CCDirector를 살펴보니 initOpenGLViewWithView을 하고 initOpenGLViewWithView에서 


surfaceSize_ = rect.size;

screenSize_ = CGSize.make(surfaceSize_.getWidth(), surfaceSize_.getHeight());


을 해주고 있다. 

여기서 screen size 와 surface size을 설정하고, 

CCDirector.java의 onSurfaceChanged(GL10 gl, int width, int height) 에서도 다시 surfaceSize를 window 사이즈로 설정이 된다.


그러니 surface의 size는 단말의 해상도 그대로 두고, screen size만 변경해 주자.


Activity의 onCreate에서 setScreenSize를 추가해 주자.


CCDirector.sharedDirector().attachInView(_glSurfaceView);

CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);

CCDirector.sharedDirector().setScreenSize(480, 800); // 고정 시킬 크기

CCDirector.sharedDirector().setDisplayFPS(true);

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

CCScene scene = GameLayer.scene();

CCDirector.sharedDirector().runWithScene(scene);


그리고 CCDirector.sharedDirector().displaySize() 를 가지고 layer에서 작업하던 부분은 

CCDirector.sharedDirector().winSize() 로 고쳐 주자. 그래야 surface의 display 크기가 아닌 screen size를 가지고 위치를 결정하게 된다. 


혹시나 싶어 CCDirector.sharedDirector().convertToGL로 touch영역을 확인해보니 

800x1280을 screen size 480x800에 맞게 잘 변환해 준다. 


단, 이렇게 하면 480x800으로 하던 이미지를 늘려서 800x1280에 맞추게 되기 때문에 이미지가 선명하지는 않게 된다. 


장황하게 썼지만 결론만 말하면 onCreate에서 CCDirector.sharedDirector().setScreenSize()로 사이즈를 정하고, layer에서 CCDirector.sharedDirector().displaySize 는 CCDirector.sharedDirector().winSize() 로 변경해서 작업하면 된다. 


그런데 검색해보니 android cocos2d의 해상도 고정에 관한 내용이 거의 없길래 써봤다. 

쓰고 보니 다운받은 lib의 README.txt에서 같은 얘기가 있다. 역시 무조건 검색보다 README를 확인해보는 것이 중요...

0.99.4에서 확인

Posted by 커널제로

본 블로그는 페이스북 댓글을 지원합니다.

,