CocosBuilderとローカライズ
CocosBuilderを使うと画面上にラベルを表示してアニメーションさせたりが非常に簡単になりますが、
ローカライズはどうするのかなと思っていました。
とりあえずベストなやり方がわからなかったので、CocosBuilder上は日本語で作っておいて、
cocos2d-xのプログラム上で言語設定を見て、英語の場合はラベルを英語に置き換えるようにしました。
もっといい方法があるかもしれません。
今回使用したバージョン
- cocos2d-2.1beta3-x-2.1.1
- CocosBuilder3.0a
実装方法
Layerが初期化されたタイミングで言語設定を見て判別したいのですが、initメソッドではCocosBuilderのLayerがまだロードされていないのか、うまくいきません。
なのでCCNodeLoaderListenerを継承してonNodeLoadedを実装します。
HogeLayer.h
// CCNodeLoaderListener継承 class HogeLayer : public CCLayer, public CCNodeLoaderListener { public: CCBAnimationManager* mAnimationManager; HogeLayer(); virtual ~HogeLayer(); virtual bool init(); // onNodeLoaded virtual void onNodeLoaded(cocos2d::CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader); CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(TitleLayer,create); void setAnimationManager(CCBAnimationManager *pAnimationManager); };
HogeLayer.cpp
// ロード後 void HogeLayer::onNodeLoaded(cocos2d::CCNode *pNode, cocos2d::extension::CCNodeLoader *pNodeLoader) { // 日本語以外の場合のローカライズ if(CCApplication::sharedApplication()->getCurrentLanguage() != kLanguageJapanese) { CCLabelBMFont *titleLabel = (CCLabelBMFont *)this->getChildByTag(10); titleLabel->setString("English title!"); } }
Nodeがロードされたタイミングで、日本語以外の場合はラベルをそれぞれ別の言語に置きかえます。
上の例ではTagを使ってCCLabelBMFontを取得していますが、onAssignCCBMemberVariableを使って事前に紐付けておいても大丈夫です。
ちなみにcocos2d-x 2.0.4以前ではkLanguageJapaneseの定義がないので、追加が必要です。
その場合、このサイトが参考になります。
tks2.net - このウェブサイトは販売用です! - 講演 依頼 開発 イラスト ウェブ 作成 ソフトウェア デザイン リソースおよび情報