メモ

いつの日かUnity

今ゲーム制作で利用しているCocos2d-x(C++)は弾幕ゲームのようにたくさんのスプライトを動かすのに適している(動作負荷が軽い)。今後制作するカジュアル系のゲームも微妙に弾幕要素が混ざるので今後もCocos2d-xを使い続けるのだけれど、Unity向けのアイデアも色々浮かぶ。ボクセルのゲームは楽しそう。

Webデザイン

ゲーム制作の話ばかりですが、Webデザインも大切なお仕事。ということで気になった記事をメモ。ノンデザイナーズデザインブックのUI版的な記事です。
→参考:優れたUIを実現するために確認しておくべき51のチェックリスト
 

Github

Githubの説明をRPGで学ぶサイト。
→参考:ギットクエスト
 
 
 

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

シングルトン

各クラスから共通に利用できる

Flashでは情報管理用のMCを作成していましたがCocos2d-x等ではシングルトンを使うのですね。デザインパターンは効いたことがありますが利用するのは初めてです。
→参考:Cocos2d-xでシングルトンによる画面間データ連携
 

構造体

ActionScript2.0 → jQuery(javaScript)と渡ってきた私は構造体も初体験。初利用のシングルトンに利用したためエラーに苦しめられることに。
***************************************************
public:
 struct normalData{
  int bType[3];
  int bNum[2];
  float speed[3];
 };
 normalData normalPattern[100];
***************************************************
構造体を作成する「struct文は型を設定」すると理解すると良さそう。上記ではnormalDataという(構造体の)型を作成している。struct文は型を設定するだけなので。変数の宣言も行わないと行けない。そこで最後の行でnormalData型の変数normalPatternを作成している(サンプルでは100個分の配列として)。
 
この変数normalPatternはシングルトンの変数として外部から参照するためpublicとして設定する必要がある。
 
 
 

A valid provisioning profile for …

新年早々トラブルです。弾幕の器2の開発が完了したので次回作のプロジェクトを作成したのですが実機検証で以下の様なアラートが表示されてしまうのです。これまで遭遇したことのないアラートです。
スクリーンショット 2016-01-02 3.22.41
 

developer用のプロファイルが

itunes conectでprovisioning profileを確認すると、いつも勝手に作成されていたdeveloper用のprovisioning profileが作成されていません。
なぜ作成されないのか不安なのですが手動で作成しました。今回追加した「cage_develop」だけ「Managed by xcode」ではありません。大丈夫なのだろうか?
スクリーンショット 2016-01-02 18.41.50
 
でもってプロジェクトの設定を以下の様にしたら実機で起動できた(画像はクリックで拡大できます)。以前のプロジェクトはdebugもreleaseもDistributeのプロファイルを設定しても問題なかったのですが、今回は画像のようにdebugにはdevelopのプロファイルを設定しないとダメでした。
スクリーンショット 2016-01-02 3.35.57
 
根本的に解決したのか分かりません。アプリが「完成してからdistoributeできない」なんて事態にならないか不安です。関連がありそうな記事を下にメモしておきます。というか全く同じパターンです。この方はその後、この設定でreleaseできたのでしょうか?それなら私も安心なのですが。
→参考:プログラミング備忘録様「A valid provisioning profile for this executable was not found

Xcode:no identities were available

verUp申請で躓く

弾幕の器2の最終データが完成したのでxcodeでuploadしようとしたら「no identities were available」と表示されuploadできませんでした。この問題に対してはgoogleで検索すると日本語の情報もたくさん出る(但し古い情報が多い)のですが、私のケースは少しシンプルだったのでメモ。
 

Developer登録の更新

私の場合は12月の初めにDeveloper登録を更新していたのですが、これに関連してトラブルが発生しました。DeveloperのCertificatesはすぐに更新を済ませたのですが、アプリのProvisioning Profilesを更新する必要もあったようで、これを忘れていたために発生したトラブル。とりあえず弾幕の器2のProvisioning Profilesだけを更新した状態でスクリーンショットをとってみた。danmaku03以外がExpired(期限切れ)になっている。
スクリーンショット 2015-12-23 18.54.41
 

修正方法

更新したいアプリのProvisioning Profilesを選択してEditボタンをクリックすると以下の様な画面になる。ここで赤枠の部分で更新したDeveloperのCertificatesをチェックして新しいProvisioning Profilesをします(Generateボタンをクリック)。
expired
生成したProvisioning Profilesはダウンロードし、xcodeを開いている時にダブルクリックすれば自動的にxcodeに反映されます。私の場合はこれで「no identities were available」の問題を回避できました。
 

リリース時期

Appleはクリスマス休暇(12/22~29)のためリリースは1月中旬位になってしまうかもしれません(休暇中はiTune Conectのアプリ審査ボタンがグレーになっていて押せない!)。Androidは機械審査なので大晦日くらいにはリリースできると思います。
 

例によって動画

要塞のデータは以下の様に仕上がっています。エミュレータなので処理が追いつかず実際の攻撃とは異なってしまっています。

 
 
 

傾きの検知

次の弾幕ゲーム

「弾幕の器2」で諦めたことにショット方向の設定がありました。次回作では頑張って導入してみたいと思います。ショット方向は移動やボムと被らないように、携帯の傾きで制御することを考えています。youtubeにcocos2d-xでの傾き検知の動画があったのでメモ。

 

更新状況

弾幕の器2の更新状況は「戦艦データの調整中」です。Appleは22日からクリスマス休みになってしまうので急いでも審査して貰えないので…。