Cocos2d-x:ビットマップフォント作成

久しぶりにビットマップフォントを作成しようと思ったらハマったのでメモ。以前にもメモしたのですが言葉足らずな感じなので…。今回もShoeBoxを利用します。
→参考:以前のメモ(2014.9/8)
 

pngは分割しない

spriteFrameを作成するときはバラバラのpngデータを利用しますが、ビットマップフォントの場合は「1つにまとめたpngデータ」を用意します。今回用意したのは以下のような画像(分かりやすいように黒背景にしていますが、実際のデータは透明背景です)。
gameText
 

ShoeBoxの設定

1枚のpngファイルが分析されて自動分割されるので、それに合わせて「Txt Chars」を設定しなければなりません。メインウインドウ内(下画像で一番小さいウインドウ)に対応状況が表示される(黒縁の白文字)ので間違いがないか確認できます。
またデフォルトのカーニング設定は文字間隔が狭いので調整した方がよいでしょう(Kerning Valueの値を調整する)。
blog0227

.fntファイルの修正

shoeBoxでbitmapフォントを作成するとpngファイルの他に「fntファイル」が書き出されるのですが、このファイル内のパスが絶対パスになってしまうので、これを修正します。
スクリーンショット-2016-02-27-3.19
fileの値はfntファイルからみたpngファイルの相対位置なので、同じ階層に配置するのであればファイル名だけでOKです。あと問題はないと思うのですが、一番最初の「face」の項目も同じように修正しておきましょう。
 

Cocos上での表記

ビットマップフォントの表示をWeb上で検索すると「CCLabelBMFont」を利用した方法が出てきますが、これは非推奨になっているので以下のようにcreateWithBMFontメソッドを利用します。
++++++++++++++++++++++++++++++++++++++++++++++++++
string strTimeScore = StringUtils::format(“%d”,myTime);
Label* lbTimeScore = Label::createWithBMFont(“images/numFont.fnt”,strTimeScore);
lbTimeScore->setPosition(120,136);
endNode->addChild(lbTimeScore);
++++++++++++++++++++++++++++++++++++++++++++++++++
今回は得点表示なので、1行目で得点を文字列に変換しています。
2行目でビットマップフォントを作成しています。今回利用するnumFont.fntはCocosのResources内のimagesフォルダに入れたので上記のように「パス」を記述しました。3行目で位置を設定し、4行目で表示しています。

以上。

Cocos2d-x:ゲームの一時停止

意外と面倒

まず参考になったのは以下のサイト。ただしpauseSchedulerAndActionsなどは現時点では非推奨になっているので代わりにpauseやresumeを利用する必要がある。
→参考:open hope様「ゲームをポーズ(一時停止)しよう
 
注意すべき点は以下の2つ。
ポーズボタン自体も無効化してしまうので別途resumeをする必要がある
子スプライトに伝播しない
 
現在作成しているゲームでは孫スプライトまで停止させる必要があるため以下のように記述した。孫はgrandChildだけど長いのでmagoにしています。
***********************************
for (auto* childs : this->getChildren()){
 Sprite *spriteChilds = (Sprite *)childs;
 spriteChilds->pause();//———————–子供:ポーズ
 for (auto* mago : spriteChilds->getChildren()){
  Sprite *spriteMagos = (Sprite *)mago;
  spriteMagos->pause();//——————–孫:ポーズ
 }
}
***********************************

円弧の体力ゲージ

Cocos2d-xでは円弧のプログレスバーを作成できると聞いたのでしらべてみた。
本家のサイトに行ってみるものの良くわからない。setzTypeメソッドを使うと思うのだけれど、値のリストが見当たらない…。
→参考:本家「ProgressTimer Class Reference
 
さらに調べたら以下のサイトを見つけた。円弧の設定もある!
→参考:プログレスバーに使えるCCProgressTimerクラス
 
あと円弧ではないけれど動画も見つけたのでメモ(かなり古いけれど…)。

Xcode7:does not contain bitcode

Xcode7で既存のCocos2d-xプロジェクトを読み込みiOS9.2の実機テストをしようとしたところ「does not contain bit code」のエラーがでる。有名なエラーのようで検索すると情報がたくさん出てくる。
→参考:google検索「Xcode7 does not contain bitcode
 
これはビルド設定のENABLE_BITCODEをNOにすると解決するが、ENABLE_BITCODEを設定する場所がわかりにくいのでメモ。まずは以下のように「Project」を選択する。
スクリーンショット-2016-02-11-14.21
 
そのProjectにて「Build Setting」を選択する。ここで注意するのが初期の状態ではENABLE_BITCODEの設定が表示されないので左肩の部分をBasicから「All」に変更する。するとBuild Optionsの中にENABLE_BITCODEの項目は表示されるので、これをNoにすればOK
スクリーンショット-2016-02-11-14.21