CCLabelTTFのenableStrokeをiOS7に対応させる
ポッピンゲームズジャパンの小林です。
最近秋葉原オフィスができました!
cocos2d-x.jpのイベントや忘年会にて、「ブログ見ました」と声をかけて頂く事がありまして、ありがたいことです。久しぶりの更新です。
今日は CCLabelTTF の enableStroke によるストローク(縁取り)をiOS7対応にしてみよう、という内容です。
cocos2d-x 2.1.4から、CCLabelTTFにenableShadowによるシャドウと、enableStrokeによるストローク(縁取り)の機能が入りました。
しかしこいつ、iOS7では動きません。2.1.5、2.2とバージョン上がっても動きません。残念。
git上の最新コードも、iOS7に対応させようね、と書いてある状態から変わってません。
そこでiOS7に対応させてみました。要は、NSString の drawInRect:withAttributes:を使えば良いのです。
対象は cocos2dx/platform/ios/CCImage.mm 内の_initWithString関数です。
NSString の drawInRect:withFont:lineBreakMode:alignment: が使われているんですが、ここをiOS7の場合のみ以下のような感じに変えてあげます。
NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; paragraphStyle.alignment = ((2 == uHoriFlag) ? NSTextAlignmentRight : (3 == uHoriFlag) ? NSTextAlignmentCenter : NSTextAlignmentLeft); UIColor *strokeColor = [UIColor colorWithRed:pInfo->strokeColorR green:pInfo->strokeColorG blue:pInfo->strokeColorB alpha:1.0]; UIColor *fontColor = [UIColor colorWithRed:pInfo->tintColorR green:pInfo->tintColorG blue:pInfo->tintColorB alpha:1.0]; NSDictionary *attribute = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle, NSForegroundColorAttributeName:fontColor, NSStrokeColorAttributeName:strokeColor, NSStrokeWidthAttributeName:@(-pInfo->strokeSize*2) }; [str drawInRect:CGRectMake(textOriginX, textOrigingY, textWidth, textHeight) withAttributes:attribute];
ストローク幅をマイナスにするのがミソですね〜!正の数だと中身が透けます。
ついでにgitの最新版コードを持ってくるとシャドウ関係もいい感じになります。
あとでまとめてパッチにしておこうかな…小林でした。
★この記事にご興味頂けた方、Facebookの「いいね」Twitterでの拡散、
Bookmarkボタンを押して頂けると光栄です。
★ポッピンでは人材募集中です
ソーシャルゲーム/ネイティブアプリ開発エンジニア歓迎!詳しくはこちら!