Labelは、テキストを表示するだけのシンプルなものですが、いざ使おうとするといろいろ考えなければいけない点が出てきます。そうした問題についてまとめてみましょう。まずは、日本語の利用についてです。
Labelに表示するテキストを色々変更してみると、「日本語が表示されない」という現象に気がつくはずです。日本語が使えないのでは、アプリの開発もかなり制限されてしまいますね。が、Cocos2d-xで日本語が使えないわけではありません。デフォルトでは日本語が使えない状態になっている、というだけのことなのです。日本語を使えるようにするためのポイントを整理しておきましょう。
●日本語フォントを用意するCocos2d-xのプロジェクトでは、「
Resources」フォルダ内に「
fonts」フォルダがあり、その中にフォントファイルが保管されています。
createWithTTFメソッドでは、ここにあるフォントファイルが指定されていました。が、デフォルトで用意されているフォントファイルは、英数字のみで日本語の文字は含まれていません。ですから、日本語のフォントを用意する必要があります。
Windowsであれば、Windowsフォルダ内にある「
Fonts」フォルダの中に、フォントファイルがまとめられています。この中から、日本語フォントを探して複製し、Cocos2d-xのプロジェクトフォルダにある「
Resources」内の「
fonts」フォルダ内に入れておきます。例えば、「
msgothic.ttc」は、MSゴシックのフォントファイルですし、「
HGRPP190.TTC」はMG創英角ゴシックポップ体のファイルになります。このあたりをコピーして入れておくとよいでしょう。
●ソースコードファイルをUTF-8にするソースコードファイルは、デフォルトではMS932でエンコードされていると認識されてしまいます(Windowsの場合)。ソースコード内に日本語のリテラルを用意しようと思ったら、UTF-8にエンコードしておく必要があります。まずはテキストエンコーディングを確認しましょう。
また、エンコードが正しくとも、ビルド時にその情報が正しく伝わっていないとUTF-8と認識してくれません。ソースコードの一番上に、
#pragma execution_character_set("utf-8")
このように追記して下さい。これで、そのソースコードファイルはUTF-8でエンコードされていると認識されるようになります。
――以上の2点について正しく設定できていれば、日本語が表示できるようになるはずです。下にサンプルを挙げておきましょう。実行すると、日本語のテキストが左下に表示されますよ。
#pragma execution_character_set("utf-8")
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if (!Layer::init())
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
Director::getInstance()->setDisplayStats(false); // stats OFF
auto label = Label::createWithTTF("日本語を表示する", "fonts/msgothic.ttc", 48);
label->setAnchorPoint(Vec2(0, 0));
label->setPosition(origin.x, origin.y);
this->addChild(label, 1);
return true;
}
