블로그 이미지

냥날의 티스토리

Rss feed

cocos2d-x Multi-resolution 지원 (Retina 등)

iPhone/cocos2d 2013.03.03 21:36

원본 링크; http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Multi_resolution_support


코코스 버전 2.0.4에서부터 retina 라는 개념이 사라지고 안드로이드의 여러 가지 해상도를 일반적으로 지원하기 위하여 두 가지 개념이 도입되었다.


designResolutionSize

실제 디바이스의 해상도와 상관없이 임의의 좌표계를 설정할 수 있다. 해상도가 바뀌더라도 같은 UI 디자인을 사용한다면 이 개념만으로도 여러 가지 해상도의 디바이스를 지원할 수 있다. 

CCEGLView::sharedOpenGLView()->setDesignResolutionSize(width, height, policy) 


resourceDirectory의 사용

해상도에 따라 다른 크기의 리스소를 사용한다면 resourceDirectory를 다르게 지정함으로서 쉽게 해결할 수 있다. 예를 들어 ./iphone 디렉토리에는 저해상도 이미지 파일들을 넣어 놓고, ./retina 디렉토리에는 레티나 이미지(x2,x2 해상도)를 같은 이름으로 넣어 두는 식이다. 이를 위한 API는 CCFileUtils::sharedFileUtils()->setResourceDirectory() 이다.


contentsScaleFactor

designResolution에 대한 resourceSize의 비율. 예를 들어 레티나 디스플레이에서 이미지를 표시할 때, 레티나 전용 고해상도 이미지를 사용할 수도 있지만 저해상도 이미지를 2배스케일로 표시할 수도 있다. 이 일을 할 수 있게 해 주는 값이다. 보통 width나 height 중 하나의 값으로 스케일을 결정하게 된다. 


policy

(1) Exact Fit - designResolution 전체를 디바이스 화면에 맞춘다. 가로세로 비율 왜곡이 일어날 수 있다.

(2) NoBorder - 가로세로 비율을 유지한 채 꽉 차는 화면으로 만든다. 화면의 일부가 잘려나가 보이지 않을 수 있다.

(3) Show All - 가로세로 비율을 유지한 채 모든 화면을 보이게 만든다. 레터박스가 나타날 수 있다.


visibleArea

NoBorder 정책을 사용하면 디자인 화면 상의 일부가 잘려나가 보이지 않을 수 있다. 따라서 어떤 해상도에서도 보이는 visibleArea를 얻어서 사용해야 한다. 

관련 API: CCDirector::sharedDirector()->getVisibleOrign() CCDirector::sharedDirector()->getVisibleSize()

이 visiblePoint를 계산하는 방법을 알고 싶다면 TestCpp의 VisibleRect를 참고하시라.


저작자 표시
신고

'iPhone > cocos2d' 카테고리의 다른 글

cocos2d-x Multi-resolution 지원 (Retina 등)  (0) 2013.03.03

[Objective C Memo] for ... in ... 구문

iPhone/Objective C 2012.10.24 11:14

C++에 익숙했던 사람으로서 Objective C는 참 묘한 언어인 것 같다.


1. for ... in ...  구문 - foreach 를 구현할 수 있다.


for (UITouch* touch in Touches)

{

    // ...

}


관련링크: Fast Enumeration


위 링크의 설명을 보면 알겠지만, 이 기능은 "언어 특징language feature"이다. 작동 방식은 collection 객체를 enumerating하는데 내부적으로 yield를 구현한 것으로 보인다.


 NSFastEnumeration protocol을 지원하는 객체를 이 문법으로 사용할 수 있다고 한다.


C++ 개발자의 느낌으로 보면 참 희한한 것이.. 이런 방식으로

Objective C라는 언어와 프레임웍 라이브러리가 상당히 밀접하게 묶여 있다는 점이다. 

저작자 표시
신고

'iPhone > Objective C' 카테고리의 다른 글

[Objective C Memo] for ... in ... 구문  (1) 2012.10.24
[Objective C Memo] autorelease 되는 시점  (0) 2012.10.23

[Objective C Memo] autorelease 되는 시점

iPhone/Objective C 2012.10.23 15:35

링크: http://blog.altwave.com/10


요약: autorelease하면 오토릴리즈 풀이라는 곳에 들어 가 있다가, 이벤트 콜이 끝날 때 진짜로 릴리즈 된다. (이 시점에서 오토릴리즈 풀이 파괴됨)


저작자 표시
신고

'iPhone > Objective C' 카테고리의 다른 글

[Objective C Memo] for ... in ... 구문  (1) 2012.10.24
[Objective C Memo] autorelease 되는 시점  (0) 2012.10.23

property list에서 NSArray를 읽어 들일 때 안된다면?

iPhone 2012.10.10 03:31

NSMutableArray* array = [[NSMutableArray alloc] initWithContentsOfFile:path]


위와 같은 호출로 프로퍼티 리스트에서 배열을 읽어오길 바랬는데, 결과값으로 nil 이 리턴되었다면?


오늘 겪은 원인은 property list가 array타입이 아니라 dictionary타입으로 정의되어 있었기 때문이었다. 


해결책은 plist 파일을 텍스트 편집기로 열어서 <dict>..</dict>를 날리고 <array> .. </array>로 변경했다.


참고링크: http://stackoverflow.com/questions/6693333/plist-in-xcode-creation-problem 


저작자 표시
신고

'iPhone' 카테고리의 다른 글

property list에서 NSArray를 읽어 들일 때 안된다면?  (0) 2012.10.10

맥북(Mac OS)에서 SHIFT+SPACE로 "빠르게" 한영전환하기

iPhone/MacOS 2012.10.09 23:36

Snow Leopard vs. Mountain Lion

  1. 마운틴 라이언을 구입해서 업그레이드 해 보니, 바람 입력기가 잘 동작함. (끝)
  2. 아래 내용은 맥북프로에서 Snow Leopard를 고집할 때의 이야기.


문제의 개요

  1. 현재 맥북프로 + MacOS 10.6.8 조합에서 SHIFT+SPACE로 한영전환이 안됨
    1. 최고의 입력기인 <바람 입력기>도 MacOS가 업데이트 된 후 오작동하고 있음. (바람 입력기가 정상화된다면, 지금 말하려는 방법 버리고 바람 입력기를 쓰면 될 것으로 보임) 
    2. property list editing 도 이제 안 먹힘.
    3. 환경설정>키보드>키보드 단축키>키보드 및 텍스트 입력에서 "이전 입력 소스 선택"을 재설정 해 봐도 이상하게 SHIFT+SPACE만은 안 먹음.. (왤까..)
    4. 유일하게(?) KeyRemap4MacBook은 먹힘.
  2. 근데 문제가!!
    1. 웹질해서 나온 방법으로는 Shift+Space로 한영전환할 때 딜레이가 느껴짐.
    2. 원인은 Cmd+Space 이벤트가 KeyUp에서 작동하기 때문.

해결책

KeyRemap4MacBook은 쓰되, 일반적인 KeyToKey 리맵핑을 쓰는 것이 아니라, KeyDown 이벤트때 한영전환을 시키도록 리매핑을 함. 다음은 이 일을 하는 Private.xml

<?xml version="1.0"?>

<root>

    <item>

        <name>SHIFT+SPACE to KOR/ENG (Fast using KeyDown)</name>

        <list>

        <item>

          <name>SHIFT+SPACE to Command + Space (Fast)</name>

          <identifier>remap.shift_space_koreng_command</identifier>

          <autogen>--KeyToKey-- KeyCode::SPACE, ModifierFlag::SHIFT_L, KeyCode::VK_NONE,

            Option::KEYTOKEY_BEFORE_KEYDOWN, KeyCode::SPACE, ModifierFlag::COMMAND_L, KeyCode::COMMAND_L

          </autogen>

        </item>

        </list>

    </item>

</root>


Private.xml 을 적용하는 방법에 대해서는 다음 링크를 참고하기 바란다.

http://cdmanii.com/2696 


저작자 표시
신고

'iPhone > MacOS' 카테고리의 다른 글

맥북(Mac OS)에서 SHIFT+SPACE로 "빠르게" 한영전환하기  (0) 2012.10.09
TOTAL 27,750 TODAY 17