だいたい47度

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

cocos2dのCCLabelクラス比較

CCLabelAtlasを使おうとしたのだけど、あまり資料がなかったのでメモ。

ラベル系クラスとしては、CCLabelTTF、CCLabelBMFont、CCLabelAtlasがあります。それぞれ、表示するフォントをどこから取ってくるかが異なり、そのため使い分けが必要です。

CCLabelTTF
CCLabelTTFは、フォントファイルを使ってラベルを描画するクラスです。otfファイルなどをAddしてplistに設定してあげるだけで使えます。

メリットとしては、よいフォントがあれば準備が必要ないこと、数多くの文字に対応できること、フォントサイズの変更が効くことなどが挙げられます。デメリットとしては、ゲーム内でのラベル書き換えが高コストであること、フォントまるまる入れるのでサイズが数MBは増えることなどが挙げられます。特に、CCLabelTTF書き換えコストは要注意です(CCLabelTTFはstringが書き換えられるごとにテクスチャを再作成します)。

以前作った百人一首アプリではこれを使っています。僕のゲームでは文字列をよく使いましたが、ほとんど書き換えが行われません。百人一首に使われている文字を全てチェックしてCCLabelBMFontにするのが面倒だったこともあり、CCLabelTTFを使いました。

CCLabelBMFont
CCLabelBMFontは、描画したい文字すべてを含んだビットマップフォントを使ってラベルを描画するクラスです。ビットマップフォント画像はHieroやGlyph Designerなどのアプリケーションを使ってつくるようです。

メリットとしては、なんといっても描画の高速性です。テクスチャの入れ替えだけなので速いです。既存のフォントを元に自分の大事にしたい文字のみを修正したりできるのもいいですね。世界観にフォントからこだわることができます。デメリットとしては、ビットマップフォント分だけのメモリを食うこと、ファイルサイズも大きいこと、フォントサイズを変更することができない(できるけど汚くなる)ことなどが挙げられます。サイズの問題から、自分が使う文字だけに絞る作業が必須であると思います。特に日本語。

CCLabelAtlas
CCLabelAtlasは、簡易なCCLabelBMFontのようなものです。Xcodeでプロジェクトを作ると自動的に入っているfps_images.pngがまさに良い例です。「./0123456789」という文字列が入っていますが、これはASCII文字順に並んでいます。使うときには各文字の幅と「.」から始まる文字列ですよ、と指定して使います。数値の他に特別にGとかだけ使いたいのなら「/」や「:;」にGを振ってしまうのもありですね。メリット・デメリットはCCLabelBMFontに近いですが、サイズが小さいことで幾つか違います。

CCLabelAtlasを作ってみる
まずルーラーを作ります。下のようなもの。後で横幅とかが必要になるので、先に横幅を決めてルーラーを作ってしまいます。Retina対応があるので、想定している大きさの倍で作ります。最後に画像で必要な部分を切り出すときも、ルーラーにあわせて切り出せるので楽。
ruler.png

あとはルーラーに合わせて、数字や文字をあわせていきます。できたものがこちら。とりあえす数字しか必要なかったので、記号は略。この画像はnumbers-hd.pngとして保存し、半分のサイズの画像をnumbers.pngとして保存しました。
damagenum-hd.png

コードは簡単。startCharMapで最初の文字を指定します。

CCLabelAtlas* label = [CCLabelAtlas labelWithString:@"987056" charMapFile:@"numbers.png" itemWidth:12 itemHeight:16 startCharMap:'0'];
label.position = ccp(160, 200);
[self addChild:label];


表示されました。アトラスに入っていない文字は空白扱いになります(上記で@"987.056"といれると「987(空白)056」という表記になります)。
cclabelatrassample.png
関連記事
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。