【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でも試したりしてたので、余計に混乱しました。。。
まさにハマってました。

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

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

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

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

csb配置とタッチイベント

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

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

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

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

本日アプリをおよそ2年ぶりにリリースします。

2年という長い年月をかけて、超大作が、、、

というわけではございません。申し訳ないです。

新しいことにチャレンジしすぎて、結果迷子になり、モチベを落とし、
パズドラやったり、モンハンやったり、スプラトゥーンやったりと
いろいろな障害を乗り越えてやっとこさアップル様からリリース許可をいただいております。

リリースは私が仕事から帰ってきてからなので
本日の夕方以降の予定です。
これは一番最初に作ったアプリが、作成時のゴミが残ってしまっていて
すぐApple Storeから外したかったのですが、
仕事に出てて、悶々としていたことがあったためです。

今回新しくどんなことにチャレンジをしているかを残しておきます。
(本音:自分で自分に言い訳しておきたい)

いいわけ その1 cocos2dをやめ、cocos2d-xへ
Androidでも出してみたい!という夢をみて
やっとなれてきたObjective-Cを捨て、C++に手を出しました。

「どうせ似たような名前のメソッドでつくれるんだろ」という浅はかな考えだったのですが
このタイミングでcocos2d-xはバージョン変更期間だったらしく
ちょうど2.xから3.xへと変わっていくタイミングでした。

おまえ新規なんだから関係ないだろ!と思われるかもしれませんが
その当時売り出されていた書籍がすべて2.xだったこと、
また、たくさんサイト様が今まで2.xで記事を書いていること、
そしてなによりC++ってなに?状態であったためです。

その辺の言い訳は、1年前に愚痴ってますねw
【愚痴】cocos2d-xが重くてモチベが低かったお話(今は高めですけど)

spine導入とstatic libraryの件も1年前に愚痴ってますので省略しますw

いいわけ その2 C++がー
C++の書き方に全然なじめなかった。”C”ってつくから簡単に移行できるだろと
たかを括っていたんですが、、、全然なじめなかった。

特になじめなかったのは”→”。
cocos2dの場合は、

この書きかたが、cocos2d-xでは

なんだよこの”→”は!ってずっと思ってましたし。

だったり
あれ?”[]”をつけなくていいのって思っていたりしました

しかしながら今見ると2年も離れていたのでObjective-Cの方がよくわからないんですけどねw
対して問題ないようなことでストレスを感じていたんだなと思います。

いいわけ その3 cocos2d-xのバージョンアップにspine実装が簡単になったこと
これは完全に私がイライラしただけw。
3.2とかの時は、いちいちなんかインストールしなくてはいけなかったのに
3.4とかだとそのまま使えますとか、、、タイミングが悪かったのかなぁ。

でもなんだかんだで作りきりました。
2年間同じものを作り続けていたので、正直今面白いかどうかわかりませんw
自分が作りたいと思ったものを諦めたら負けな気がして、意地で作りました。
妥協もたくさんありますけどw

そんなこんなで時間だけたっぷりかかったアプリを本日の夕方以降にリリースします。
(技術がないとこうなるといういい例ですね)

よろしくお願いします。

【cocos2d-x】行動パターンを作成する【じゃんけん】

現在「Pending Developer Release.」となっている私のアプリでも使用しているのですが
プレイヤーさんとじゃんけんをするような仕組みを実装しました。

それだけでしたら、特にブログに残す必要もないと思ってたのですが
開発中の「脱出ゲーム」でも似たような仕組みを使用したので
今後も使用する可能性がありそうなので、メモを残しておきます。
ただし、もっと簡単な方法がある場合は教えて下さい。おねがいします。

処理の流れは単純で、
カンマ区切りの文字列を、カンマごとに配列に格納して、
都度配列からデータを取り出します。

Excel VBA的な発想でこれを思いついたのですが
どうやらcocos2d-x、C++にはSplit関数がないので自作しないといけないらしいので
以下サイト様より拝借。
C++ 文字列クラス std::string 入門

.hpp

あとは簡単

.cpp

さらに、格納したパターンをループする場合は、 以下の処理を適当なところにいれます。

こんな感じです。
Split関数さえあれば、結構簡単に実装できました。
あとは、敵キャラクターごとにデータベースなどに、カンマ区切りのパターンデータを
いれておいて、適宜取り出して使用すればいいと思います。

【cocos2d-x】入力フォームを作る【editBox】

現在申請中のアプリに入力フォームを作成しましたので
備忘録として残します。

.hpp

.cpp

実装
スクリーンショット_H28_01_22_7_15