【cocos2d-x】Android対応でハマった箇所【Android.mk】

最近、cocos2d-xで開発されている方が減ってきてますが、
私はやっとC++が理解できるようになってきましたので
まだまだ使っていきたいと思います。

先日リリースした三毛猫ルームズは、私史上初のAndroid版のアプリとなりました。
しかしながらiPhone版のリリースから2週間近くかかってしまいました。
今回は、私がハマってしまったところを備忘録として書いておきます。

undefined reference to init

テスト用のなんにも実装していないコードではAndroidのシミュレータで起動するのに
なぜか私が作成した「三毛猫ルームズ」は起動しないどころかよくわからないエラーが発生。

「undefined reference to init…」

ネットで検索すると答えを書いてくれているサイトが見つかりました。
【Cocos2dx】undefined reference to init ではまる件

ここがハマるポイントです。
上記サイト様は、多分Eclipsを使用して開発を行っていると思われます。
しかしながら私はAndroid Studioを使用してました。

ちなみにcocos2d-xがAndroid Studioに対応したのは
去年の今頃だったような気がします。
*更新日付は2014年ですね

と、いま考えれば気づけるポイントはいろいろあるのですが
先月の私にはその余裕がなく。。。結果以下のようにハマっていきます

proj.android-studioフォルダの配下にjni/Android.mkを見つけられず。
(appの配下にあるのですけどね)

proj.android-studioフォルダの配下に設定を実施するも反映されず。
(Android Studioですもんね)

なんとかproj.android-studioフォルダの配下のapp/jni/Android.mkをみつけて
上記サイト様の設定をそのまま反映するも、、、動かず
(階層が一つ深くなってるからね)

正しくは、
proj.android-studio/app/jni/Android.mk

となるように記載するのが正解でした。

余談ですが
あまりにも動作しなさすぎて
Eclipsでも試したりしてたので、余計に混乱しました。。。
まさにハマってました。

【Xcode】メモリリークを回避せよ【cocos2d-x】

なんのエラーもでない。でもアプリは落ちる。

先日リリースした、【脱出ゲーム】三毛猫ルームズは
シミュレータでは特に落ちなかった。
実機テストでも特に落ちることはなかった。

しかし、レビューで「とにかく落ちる」とコメントを頂きました。
コメントを頂いてからいろいろ試した結果、
どうやら他のアプリを立ち上げていたりすると
メモリの逼迫がアプリの落ちる原因でした。
※想定外の動作もメモリの逼迫を解消したところ治りました。

このメモリエラーは、エラーの箇所を特定するのが難しく
処理のどこがいけないのか全然わかりませんでした。

ネットでググったところ
Xcodeにそもそも備わっている
「Enable Guard Malloc」を使用してエラーを特定するのだとか
。。。知らんかった

■やり方
1.Xcodeで対象のプロジェクトを開いたら”Edit Scheme”を開く
※Xcodeのメニューから”Product” → “Scheme” → “Edit Scheme..”を選択
menu1

2.左側で”Test”を選択し、”Enable Guard Malloc”にチェックを入れ,
“Close”ボタンを押下
mike3

これだけ

あとは、シミュレータで動作確認をすれば
メモリリークを引き起こしそうな部分でエラーを出力してくれます。
実機テストでは機能しないようです。

【iPhoneアプリ】三毛猫ルームズ【脱出ゲーム】

8/11に【脱出ゲーム】三毛猫ルームズをリリースしました。
*現在バージョン1.3をリリースしております。

■iTunesのゲーム>シミュレーション>無料ランキング 129位(8/16時点)にはいりました。

iPhoroid様にとりあげていただきました。ありがとうございます。
*攻略記事ですのでネタバレを含まれております。

最も使われている無料アプリ週間ランキング50【8/10 ~ 8/16】
AppBank様の週間ランキング15位に入りました。

目を覚ましたら自分の部屋?でも何かが違う?でも、そこに隠された謎はだんだん大きくなっていくよ!「【脱出ゲーム】三毛猫ルームズ」無料♪
暗黒社様に取り上げて頂きました。

ゲーム攻略!SQOOL.NET様に取り上げて頂きました。ありがとうございます。
*攻略記事ですのでネタバレを含まれております。

iPhone版

Android版
Google Play で手に入れよう

ゲーム説明
不思議な部屋からの脱出することがゲームの趣旨となります。
部屋に配置されているアイテムをタップで選択して、
部屋を脱出するためのヒントを探してください。

【cocos2d-x】”\n”で改行できない【Label】

DB(SQLite)からデータを変数に格納して、
Labelに文字列を表示してました。

この文字列に自分の意思で改行をいれようと、
“\n”を改行したい部分に入れてたのですがうまくいきません。

ちょっとネットを検索した結果、以下のサイトを見つけました。
plistの改行文字Add Star

上記サイトではplistからのデータとかいてあるのですが
どうやらDBから抽出した文字列もあてはまるようです。
DB上では“\n”と入力してますが、プログラム的に“”\n””と認識しているようです。

抽出した文字列を、”\\n”から”\n”へ置換する処理を追加してから
Labelに表示したらできました。
めでたしめでたし。

置換関数を作成するときに参照
文字列を置換する(2)

その他
C++ってちょっと文字列操作めんどくさい。
文字列の置換ぐらい準備しておいてほしい。

・・・文字列の置換ぐらい自分で書けってことなんでしょうけど…。

【cocos2d-x】spriteにタッチしたかを判断する【Cocos Studio2】

いつの間にか、Macに対応しているようでしたので
次回作から【Cocos Studio2】を使用します。
少しだけ触りましたが、画像の配置がとても簡単です。

cocos2d-xを使用してゲームを作成する際に
一番お世話になるであろう”タッチイベント”を
配置した画像(sprite)に対して設定する方法をメモしておきます。

Cocos Studio2で作成したcsbファイルを配置するための宣言

csb配置とタッチイベント

タッチした場所が画像に含まれているかをチェック

⬛︎ざっくり概要
 タッチ時のポジションを取得
 タッチ時に画面に追加されているcsbファイルの子ノードを読み込む
 子ノードの範囲がタッチ時のポジションと重なっていることを確認
 子ノードの名前が処理を実施したい名前であることを確認
 ほげほげ

ちなみに子ノードの名前はCocos Studio2で設定できます。
あとはTagも設定できるのでそちらも判定条件できます。

もっといい方法があったら教えてください!!!