読者です 読者をやめる 読者になる 読者になる

Poppin Games Engineer Blog

ポッピンゲームズジャパン株式会社のエンジニアのブログ。弊社製品やcocos2d-x、AWSに関する情報を中心に発信しております。

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ボタンを押して頂けると光栄です。

★ポッピンでは人材募集中です
ソーシャルゲーム/ネイティブアプリ開発エンジニア歓迎!詳しくはこちら!