cocos2d-x iOS7에서 CCLabelTTF 렌더링 이슈



 cocos2d-x 2.1.4 이하 버전은 iOS7에는 그림과 같이 CCLabelTTF 가 보이지 않는 렌더링 이슈가 있습니다. cocos2dx/platform/ios/CCImage.mm 파일을 수정해줘야 하는데 깃허브에 수정 된 내역을 보면

static bool _initWithString(const char * pText, cocos2d::CCImage::ETextAlign eAlign, const char * pFontName, int nSize, tImageInfo* pInfo)
{

...

        // ios7
        //CGContextRef context = CGBitmapContextCreate(data, dim.width, dim.height, 8, dim.width * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
        CGContextRef context = CGBitmapContextCreate(data, dim.width, dim.height8, (int)dim.width * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

 위와 같은 메서드의 내용중에 주석된 부분을 아래의 내용으로 대체해주면 됩니다. 즉 dim.withd * 4에서 (int)형 변환을 추가해주는 것이죠.


        // normal fonts
        /*
        if( [font isKindOfClass:[UIFont class] ] )
        {
            [str drawInRect:CGRectMake(0, startH, dim.width, dim.height) withFont:font lineBreakMode:(UILineBreakMode)UILineBreakModeWordWrap alignment:align];
        }
        else // ZFont class 
        {
            [FontLabelStringDrawingHelper drawInRect:str rect:CGRectMake(0, startH, dim.width, dim.height) withZFont:font lineBreakMode:(UILineBreakMode)UILineBreakModeWordWrap alignment:align];
        }
         */
        [str drawInRect:CGRectMake(0, startH, dim.width, dim.heightwithFont:font lineBreakMode:(UILineBreakMode)UILineBreakModeWordWrap alignment:align];

 또한 조금 밑부분인 위 소스도 아래와 같이 수정하라고 깃허브에는 있는데

        // XXX: ios7 casting
        //[str drawInRect:CGRectMake(0, startH, dim.width, dim.height) withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:(NSTextAlignment)align];

 이건 이렇게 수정하지 않아도 이슈가 해결이 되더군요.



이 블로그의 인기 게시물

CMake Windows에 설치하기

Unity3D iOS Plugin 만들어 연동하기

Unity3D 안드로이드 Keystore 생성하기