Cocos

   Android 2.3以降
   iOS 5.0以降
   Windows Phone 8以降
   Mac OS X 10.7以降
   Windows 7以降
   Linux Ubuntu 14.04以降

playEffectで音が消える

BGMと効果音に分けて考えるといろいろ面倒なので、とりあえず全部を効果音として処理してみると
最初に再生したBGMが途中で切れて消えてしまう。何も効果音を発生させなければなり続けるのであるが
敵が多いところやショットの連射でかき消されてしまう。どうも再生した効果音は32chまで同時発音できるが
それ以上は最初のchを上書きしてしまうようである。ミキシングして1つのchから出力する方法はないものか。

ちなみにWin32の挙動を見てみるとサウンドの再生には「mciSendCommand」を使っているんでメモリ内で生成したウェーブデータを読みこませることが出来ないっぽい。

Cocos / Macで気をつけること

  • メモリからのサウンド読み込みに対応してないので、合体ファイルからのファイル転送などができない。小文字を含むファイル名に対応できない。どうしたものか。
  • あとジョイパッド非対応。まさか無いとは思わなかった。これが欲しかったのになあ。
  • サウンドのチャンネルが32個まで
  • ファイルは全て大文字で

includeのファイルパス

visualStudio / Cocosでそれぞれincludeパスの設定をひとつ「Classes」を追加する。

iOS/Mac兼用なので両方に設定する
VCでも設定する

includeのファイル名

VCでは標準ディレクトリの設定でファイル名前後の空白が認められたが、XCodeでは認められないので注意。またファイル名の大文字小文字もXCodeでは識別される。マルチでソースを書くときは、「ファイル名準拠」「余計な空白を入れない」に注意
#include<(空白)ファイル名(空白)>

ファイルが読み込めない、リソースのファイルパスの書き方がまずい?

"test.wav"は読めるが、"/audio/test.wav"がどうしても読めない。結局XCodeのプロジェクトへのファイルの参加のさせ方がまずかっただけっぽい。注意スべき点。

ここがすごく分かりやすかった。
http://kurogomapurin.hatenablog.com/entry/2014/06/05/012415

1.リソースの登録は2種類
・XCodeで青いフォルダーなら相対パスの記述ができる「asset/test.png」
・XCodeで黄色いフォルダーならファイル名だけでいい(実際のフォルダ構成と異なってもいい)

2.どうすれば青くなるか?
・Create groupsだと黄色くなる
・Create folder referenceだと青くなる

3.XCodeでのファイルツリーは実際のフォルダ構成と異なっても問題ない
・VCのソースツリーと同じ
・だから構成した後にファイルツリーの構成を変えても実際のファイルへの参照は途切れない
・実際のファイルを削除した時は赤く表示されて参照が切れていることを教えてくれる

4.フォルダをプロジェクトに追加した時、その配下のファイルはプロジェクトに自動的に登録されない
・Deleteしようとした時に参照を切るか聞かれる時は登録されてる
・ファイルを削除するか効かれる場合は参照されてない。削除すると実フォルダから消されるので注意

新しいプロジェクトを開始したい

とりあえず、プロジェクトを作りたい場所に以下をコマンドラインで打ち込む

> cocos new プロジェクト名 -p suplex.net.gxLib -l cpp -d プロジェクトを作りたいフォルダへのパス

cocosが対応している全てのプラットフォーム用のプロジェクトが作成される

Classesソースコードを書いていくフォルダC++で記述
Resources素材データ置き場画像、音楽ファイルなど
cocos2dcocos2dxのライブラリのソースC++ファイル群
proj.android旧android開発環境(Win/Mac)Eclipse開発環境
proj.android-studio新android開発環境(Win/Mac)android studio開発環境
proj.ios_macmac/iOS版(mac)XCode環境
proj.linuxlinux版不明
proj.win8.1-universalWindowsPhone対応環境(Win)Visual Studio環境
proj.win10Windows Store対応環境(Win)/Visual Studio環境
proj.win32Windows32ビット開発環境(Win)/Visual Studio環境

includeしてるのに関数が見えない

android版のコンパイルで失敗したこと。既にiOSでコンパイルが通ってるソースを
androidで新規に環境を構築してコンパイルしてもうまくいかない。
1つはビルドツールの最新版を使ってビルド失敗してた
1つはエラーにより特定ファイルのObjが生成できてなかったのでリンクできなかった
1つはandroid.mkファイルが正しく記述できてなかった
ソースファイルをmkに追加するときは、連続したファイル名の記述が必要、つまり1行で書かなきゃだめだけど、「¥」で複数行に切り分けた時に#でコメントアウトできる。しかしコメントアウトすると複数行になってしまうため、特定ファイルがコンパイル対象になっていなかった。
1つはCPPファイルを探しだしてくれるMKを記述する方法を見つけてコピペしたけど、「wildcard」はフォルダの中のフォルダを検索してくれないのにはまってた。

FILE_LIST := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) \
			$(wildcard $(LOCAL_PATH)/../../Classes/dir1/*.cpp) \
			$(wildcard $(LOCAL_PATH)/../../Classes/dir2/*.cpp) \

リンクで失敗する

A/AppMain.cpp、B/AppMain.cppの2つのファイルを用意してコンパイルする。もちろん、2つのファイルは別々の場所で中身も別物である。しかしOBJファイルはフォルダ分けされないで出力されるため、後からコンパイルされたファイルのOBJで上書きされることになる。結果、リンク時に「A/AppMain.cppの関数がない」ってことになるので注意。

とりあえずリコンパイルする

挿入されたコードの PDB への書き込みに失敗しました

プログラムデータベースへの書き込みが失敗、なぜだ、事前のOpenGL版では問題なかったのに。。。調べてみる

内部コンパイラ エラー: 挿入されたコードの PDB への書き込みに失敗しました。

https://msdn.microsoft.com/ja-jp/library/wxk95w7b.aspx

このエラーが発生するのは、挿入されたコード ブロックを .pdb ファイルに書き込むことができなかった場合です。
通常、このエラーの原因はディスク容量の不足です。

ウソだ、ディスク容量はたっぷりあるよ!別の原因じゃないの?ハードウェアの問題?メモリ?相性??お金かかるの?自分の手に負えない苦手な原因が頭によぎる。しかし、

[cocos2d-x]「挿入されたコードの PDB への書き込みに失敗しました」を解決する

1.プロジェクトを右クリックし、「プロパティ」を選択する。
2.「C/C++」->「全般」を選択肢、「デバッグ情報の形式」を「/Z7」に変更する。
上記の設定後にビルドし直すとコンパイルエラーが出力されなくなります。
どうしてこのエラーが出力されるようになったかは分かりませんが、ファイル数が多くなると出力されやすいようです。

ここで一発解決。なんでこれをやったらうまくいくのかわからないが。。。すげえ
なんでわかったんだ。

謎のリンクエラー

linker command failed with exit code 1

どうも同じ名前の関数やクラスを定義しているとリンカーが困るって出力することがあるらしい。実際に同名の関数名があったので取り除いた。

自前ライブラリからコンパイルすることのメリット

・動作の保証ができる
・別のデバッガを使うことで問題を多方面から特定できる

CocosをWin32から通すことでいいことあるか?

・Winで動いていたのにCocosで動かない問題はCocosとの相性であることを想定できる
・Winで動かしてしまえば他のプラットフォームでも動かせる準備が整う
・Cocosの問題をVCで解決できる

CocosをMacで動かすメリットは?
・機種依存したコードがないかチェックできる