× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
一応、BuildVariantsで選択してから通常通りビルドできる
が、なぜか上手くいかない。 リリースビルドをSignedでないAPKで作成することになるので、エラーになる リリースモードは、SignedAPKを作成するのが良い。 Signedについては、build.gradle内に記述できる。 Project Structureにも、Signedタブがある(同じ) C++の部分については、jni/Application.mkに記述できる
ここで、NDK_DEBUG の値は build.gradleの
で決まる。 なお、C++部分の定義なので、AndroidStudioからのビルドだけでなく、 $ cocos compile -p android --android-studio --ndk-mode release が必要なことに注意 PR |
プロジェクト(正確にはソースディレクトリ)を指定する(-s)
$ cocos compile -s path/to/project -p android --android-studio NDKをリリースモードでビルドする(--ndk-mode) $ cocos compile -p android --android-studio --ndk-mode release コンパイルをデバッグモードで行う(ログがたくさん出るのか?)(--debug) $ cocos compile -p android --android-studio --debug ヘルプ $ cocos compile --help (cocos --help ではない) |
・テクスチャの最大サイズは 2048x2048
なまじiOSだと動いちゃうので気づきにくい D/cocos2d-x debug info: cocos2d: WARNING: Image (2984 x 2042) is bigger than the supported 2048 x 2048 |
Xcodeだと、
CC_TARGET_OS_IPHONE というマクロが定義されているので、これを使用するのが良い。 #if defined CC_TARGET_OS_IPHONE Androidの場合、 app/jni/Application.mk に以下を記述する APP_CPPFLAGS += -DCC_TARGET_OS_ANDROID すると、こう書けるようになる #ifdef CC_TARGET_OS_ANDROID まとめると、
となる。 マクロでなく実行中に判定したい時は
という書き方もできる 以下、次善策 #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS #elif CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID #endif このような感じで書く。 気をつけないといけないのは、 #include "Cocos2d.h" または #include "cocos/platform/CCPlatformConfig.h" をしていないファイルでこの記述を書いても正しく動作しないということ。 CC_TARGET_PLATFORMもCC_PLATFORM_IOSもどちらもundefinedだと、 等号自体は成り立ってしまうため だから #if defined(CC_TARGET_PLATFORM) && (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) というような書き方であるべき |
RenderTexture のインスタンスを作る
texture->begin(); node->visit(); texture->end(); RenderTextureは、「ノード」を描画する。「画面」を描画するわけではない。 描画したい「ノード」(以降、ターゲットノードと呼ぶ)を、通常のdrawと同様に行うだけ。 だから、ターゲットノードに、setPosition()が入っていると、その分描画がずれてしまう。 これをRenderTextureのメソッドで修正するのは、ちょっと考え方が違うし、やりにくい (setVirtualViewport()で変更できるが。後述) 簡単な対処として、 描画前にターゲットノードにsetPosition(0,0)を行い、 描画が終わってから元の座標を再代入することが考えられる…(A) 少しスマートな方法として、ターゲットノードは、その上にダミーノードを作り、 ダミーノードにsetPosition()をしておき、描画したいノードそのものにはsetPosition()しないのが良いと思われる…(B) が、このやり方でも問題が。 renderするとなぜか、ノードが画面(親ノードではない)の左下隅に移動してしまうという問題が起きた 原因は詳しく追っていないが、 想像できるのは OpenGLのビューポート指定が(0,0,w,h)の形であり、 これだと画面の左下を切り取って描画する形になっている。 それに合わせるため、ノードを画面左下に配置して描画しているということだろうか 実際、上記の(A)の時は、この問題が起きていない。描画後にsetPosition()をしているからだろうか。 結局、 「ターゲットノードと同じものをもう一度作り、それを描画する」 という形に落ち着いた。一番無駄な形に… RenderTexture.cpp
|
読み込み処理をしている場所 どうも同期的に読んでいるように見える CDAudioManager.m audioSourcePlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error]; |
cocos2dのセーブには2種類ある
Dictionary UserDefaults このうち、Dictionary はすでに deprecated になっているので、 UserDefaults を使うことになるのだが こちらはセーブに時間がかかる 300変数をセーブすると4秒とかかかったりする ただしこれはセーブのタイミングによっても変わるし、 なんどもセーブしていると段々早くなる。 使うときはよく考えて行うべし |
cocos2dで作ったゲームプロジェクトを
古いシミュレータ対象でビルドすると、以下のようなエラーが出ることがある。 libchipmunk内で、多くのシンボルが多重定義されているというエラー。 おそらく、libchipmunkが2重にビルドされているのだろう。 なぜそういうことが起きるのが、という追求は別にする必要はなく、 libchipmunk自体使っていないので、ビルド対象から外して仕舞えば良い。 その方法は、以下のリンク先にある。 参考 プロジェクトの Build Phases の Target Dependencies から libchipmunk を削除。 また、 Link Binary With Libraries からも削除。 これでこのエラーは起きなくなる。 |
動画広告を表示して戻ってきたときなど、
画面が更新されなくなる時がある 描画以外の処理はちゃんと実行されているので、音は鳴るし、操作もできる(ただし画面は動かない) そんな時は、以下の処理を行う 動画広告を表示する前
動画広告が終わり、戻ってくる時
これにて解決。 |
古いcocos2dで(3.3以前くらい)ビルドしたとき、以下のようなエラーが出るときがある。
つまり、 fputs$UNIX2003() という関数がない、というのだ。($以降も含めて関数名。そんな付け方できたのか) 探してみると、自分で定義を追加すればいいというブログがある。 参考 使っているのは、CCImage.hらしい。 (このあたり、実装した人が勝手気ままにいろいろ外部関数を使っている感じがするのがcocos2dらしい) で、当のCCImage.hファイルを探してみる。 cocos/platform/CCImage.h cocos/platform/CCImage.cpp にある。 でも見てみると、cppのほうにすでにそれっぽい実装がしてある(cocos2d バージョン3.2)
なので、この後ろにfputsを追加
これで動いた。 |