Cocos2d-x:3.11.1のインストール

cocos2d-xのバージョンを上げるたびに同じことを書いているような気もしますが、忘れないように書いておきましょう。
 

コンパイルエラー(実機)

作成したばかりのプロジェクトは実機で実行するとがエラーとなってコンパイルできません。 これはPNGのメタデータに関する設定で修正できます。
→参考:png読み込み時にlibpng error:
xcode_cap_2
 

警告の削除

cocosでプロジェクトを作成すると警告がたくさんでます。これらはcocos2d_libs内の警告なので、cocos2d_libsのbuild setting にあるworning policiesの「inhibit all warnings」をyesに設定します。こうすることでcocos2d_libsで発生する全ての警告を抑制(inhibit)できます。
ポイントなのはcocos2d_libsの警告だけを抑制するだけで、ユーザーが生み出した警告は抑制されない点です。
せめて自分だけでも警告のでないコーディングを心がけましょう。
→参考:cocos2d-xによるビルド時の警告を消す

xcodeCapture

v3.6では以下リンクの処置だけでもOKだったような気がしましたがダメでした。上記を設定すれば以下の処理をする必要はありません。
→参考:Xcodeでサブプロジェクトのコンパイル警告の抑制

cocos2d-x:高頻度scheduleの問題

v3.11.1でも発生

以前記事にした「3.6だとOKだけど3.10でクラッシュする問題」ですが、v3.11.1でも発生しました(AndroidだけでなくiOSでも…)。しかも50fpsに設定しても「たまに」クラッシュしてしまいます。

update

scheduleではなくupdateにすると大丈夫なので、今後はupdateを利用していこうと思います。

scheduleを利用したい場合

どうしてもscheduleを利用したい場合は、thisの型を取得して比較し、目的のクラス(例えばEnemyBullet)でない場合はreturnしてthisを利用する前に処理を抜けるようにします(少々強引か…)。型を調べるのは以下のサイトが参考になりました。
→参考:Cocos2d-x v3:Nodeの種類を特定する
 
cocos2dの基本クラスは「N」で始まるようなので、以下のように処理を書きました。
———————————
if (typeid(*this).name()[0] == ‘N’){
 CCLOG(“error return”);
 return;
}
———————————
クラッシュの原因はthisが参照できずsetPositionなどでEXC_BAD_ACCESSになってしまうことなのですが、this自体はNodeとして値が取得できます。なので、この方法でthis(EnemyBullet等のクラス)が取得できず、ただのNode扱いになってしまう場合に回避処理を取ることができるのです(たぶん)。