2015-01-04 8 views
1

저는 최근에 새로운 iOS 프로젝트를 시작했습니다. 나도 안드로이드를 지원하고 싶다. 그래서 나는 최신 cocos2d-iphone (cocos2d-swift)으로 SpriteBuilder를 선택한다.안드로이드에서 CCClippingNode가 작동하지 않습니다.

콘텐츠 클리핑에 CCClippingNode를 사용합니다. 그것은 24 비트 깊이 버퍼 및 8 비트 스텐실 버퍼가 필요합니다, 그래서 응용 프로그램에 AppDelegate.m에 다음 줄을 추가하는 데 필요한 : didFinishLaunchingWithOptions :

[cocos2dSetup setObject:@GL_DEPTH24_STENCIL8_OES forKey:CCSetupDepthFormat]; 

자연스럽게이 iOS 용 전용입니다. 로그에 따르면 그것은 시작에 다음 줄 기록으로, 추가 코드없이 안드로이드에 대한 작동합니다 : 나는 코드에서 CCClippingNode를 만들 때

EGL_DEPTH_SIZE = 24 
EGL_STENCIL_SIZE = 8 

후에는 로그 :

[CCClippingNode initWithStencil:]_block_invoke : Stencil buffer is not enabled; enable it by passing GL_DEPTH24_STENCIL8_OES into the depthFormat parrameter when initializing CCGLView. Until then, everything will be drawn without stencil. 

그것은 일을 GL_DEPTH24에 CCSetupDepthFormat을 설정 한 후 (아이폰 OS GL_STENCIL_BITS에

glGetIntegerv(GL_STENCIL_BITS, &_stencilBits); 

은 8 : CCClippingNode.m에 다음 줄은 0 반환하기 때문에 _STENCIL8_OES). Android의 경우 0입니다.

Android에서도 작동하려면 어떻게해야합니까?

내가 SpriteBuilder 1.4.0-beta.3 및적인 Cocos2D-스위프트 버전을 사용하는 문제가 어디에 내가 발견

답변

1

3.4.1-개발, 그래서 난 내 자신의 질문 :

을 답변 해 드리겠습니다 전체 문제는 오해의 소지가있는 로그에서 발생했습니다. setupview :Platforms/Android/CCGLView.m에 수정해야합니다. CCGLView 실제 값을 표시한다

eglChooseConfig(_eglDisplay, configAttribs, &_eglConfiguration, 1, &numConfigs) 

후 라인

logConfig(_eglDisplay, _eglConfiguration); 

이동 0

깊이 및 스텐실 크기를 설정 eglChooseConfig를 호출하기 전에 EGL 값을 기록한다. 이 수정으로 로그에 다음 줄이 표시됩니다.

EGL_DEPTH_SIZE = 0 
EGL_STENCIL_SIZE = 0 

로그에 실제 값이 있으므로 필요한 항목은 모두 설정해야합니다. 만 configAttribs[] 구조 요구 : 이것은

EGL_DEPTH_SIZE, 24, 
EGL_STENCIL_SIZE, 8, 

그리고 CCClippingNode 갑자기 안드로이드에 너무

참고 내용을 클립 시작 기능 setupView :)의 맨 처음에 (configAttribs[]을 구성하려면 다음 두 줄을 추가하여 수행 할 수 있습니다 언급 된 두 줄로 강화된다. 다른 변경 사항은 다른 이유로 인해 로그에 실제 EGL 값이 필요할 때만 필요합니다.

+0

야, 너를 사랑해! 고맙습니다. – CodyMace