cocos2d-x(c++) で、int(整数)をstring(文字列)に変換

cocos2d-x(c++) で、intをstring(文字列)に変換

環境 cocos2d-x 3.14(c++)

StringUtils::toString()で、int型からstring型に変換できる。

int hogeInt = 123;
string hogeStr = StringUtils::toString(hogeInt);

で、下記でもできるのですが、androidでビルドするとエラーになるので、
下記を使う場合はご注意を。


string hogeStr = std::to_string(123);

cocos2d-x v3で、アニメーション終了後に指定の関数を実行する

cocos2d-x v3で、移動アニメーションのあとに、指定の関数を実行するサンプルコード

今回はアニメーション終了後に、同じクラス内の関数を呼び出す例です。
argA,argBは、指定の関数に引数を引き継ぐためのものです。

下記はcocos2d-x バージョン3系の書き方です。


// 移動アニメーション auto moveAction = MoveTo::create(1.2f,Vec2(sprite->getPositionX() + toPosX,sprite->getPositionY() + toPosY)); // ラムダ式でコールバックを設定する auto callback = CallFuncN::create([this,argA,argB](Ref *sender){ // 同じクラス内のhogeMethodをアニメーション終了後に呼ぶ this->hogeMethod(argA,argB); }); auto seq = Sequence::create(moveAction,callback, nullptr); sprite->runAction(seq); // 〜 省略 〜 void hogeMethod(int argA,int argB){ // アニメーション完了後の処理 }

味噌は、thisで、自分を渡し、同じクラスのと、argA,argBで好きな引数を持たせられる事。

Unity5(2D)でBouncinessを設定しているのに、跳ね返らない時がある

unity5_bounce

跳返したいボールがありそれのcolliderに、

  • Friction 0
  • Bounciness 1

unity5_bounce

で設定しても跳ね返らない事があり、
なんでだろうとしらべたところ。

物理挙動の環境設定の項目の
Edit > Project Setting > Physics2Dの項目の

Velocity Threshold のデフォルトの閾値が1のため、
小さすぎる速度の場合に跳ね返らないようになっていました。

unity5_bounce2
unity5_bounce

で、Velocity Thresholdを0.1等にすると解決!

ググっても情報がなかったので、下記マニュアルが大変参考になりました。!

参考

https://docs.unity3d.com/Manual/class-Physics2DManager.html

Unityのバージョンや、Physics2D や3D用のPhysicsでは項目名が違うのでご注意!

cocos2d-x(c++) 色(Color3B等)を定数の配列でカラースキーム化

cocos2d-xで、色のパターン等用意する時、
配列で定数化しておくと便利なのでメモ

宣言


// Color3Bの型で3色用意 static const std::vector<Color3B> COLOR_LIST = { Color3B(255,0,0), //赤 Color3B(0,255,0), //緑 Color3B(0,0,255) // 青 };

呼び出し


COLOR_LIST.at(0); // 赤 COLOR_LIST.at(1); // 緑 COLOR_LIST.at(2); // 青

もちろん、Color4Bでも同じ要領

ちなみに赤を出したいだけなら、、、


Color3B::RED

とするだけなので、この記事はそういう趣旨じゃない。。。

cocos2d-x(c++)ひっかかりそうなポイントメモ

ただ生成したNodeのgetContentSize()は0。


node->getContentSize().width // 0

座標は、左下が基準

OpenGLだからか、左下が基準。

oya->addChild(ko)をすると色々挙動が難しい

子は親のアンカーポイントを無視する。

getBoundingBoxの座標が連動していなかったり。

androidでビルドする時、std::to_string()を使うビルドできない。

下記で代用


int newInt = StringUtils::toString(hogeInt);

Vec2でキャストせずにintとしてつかっているといつの間にかずれるのでちゃんとキャストしよう


Vec2 vec2Hoge = hogeMethod(touchLocation); log("vec2HogeFloat x:%f y:%f",vec2Hoge.x,vec2Hoge.y); log("vec2HogeInt x:%i y:%i",vec2Hoge.x,vec2Hoge.y);

cocos2d-xのアプリ開発のお気に入り環境メモ

cocos2d-xでAndroidとiOSのアプリ開発で使っている環境メモ

言語&IDE

C++でxcode使ってる、

もうcocos creator使った方がいいみたいですが。

UI&アニメーションの開発エディタ

下記ツールでUIをGUIエディタ作れる。

cocos studio

version3.10で ※注意サポート終了

下記からダウンロード可能

http://cocos2d-x.org/docs/deprecated/studio/

メモ

  • 下記particle2dxのplistをそのまま取り込める。
  • opacityや、colorのアニメーションも、デフォルトだとタイムラインに表示されないが、record frame の✅を入れると表示される。

パーティクル用のエディタ

Particle2dx

http://particle2dx.com/
* オリジナルの画像がアップロードできないようなので、一度エクスポートしてから、画像ファイル名をplistをテキストエディタで開いて変更する。
* もしくは、エクスポート時の画像ファイル名と同じ画像ファイルで上書き。

シェーダー周り

cocos2dx用というわけでないないがシェーダーのデモに使える

http://glslsandbox.com/e#38793.0

storyboardでスプラッシュに設定したはずの画像が、実機やシミュレータで表示されない

iPhoneアプリを作っていて、ちょっとだけハマった点。。

環境

Xcode8.2
swift3.2

さっきまで表示されていた起動時のスプラッシュ画像がなぜか表示されない。

画像と一緒にいれていたテキストは表示される。

なんだこれ。

色々試行錯誤して原因を探すが。

  • storyboard上でレイアウトをいじったり、色々したけど、、駄目、
  • xcode上でstoryboardファイル自体を選択しておなしても、、駄目。
  • 画像ファイルを上書きしても、、駄目。

  • 画像ファイルの名前を変えてやってみると。。。。。治ったw!!!

なんかキャッシュが意図しないファイルでも見てるのか。。

手っ取り早い解決策。

画像ファイル名を変更するw!

Unity5で 『 library not found for -lPods-Unity-iPhone』と出たら

lPods-Unity-iPhone

『 library not found for -lPods-Unity-iPhone』

Unity5.0の時のiOSアプリを、Unity5.4xにアップデートし、
久々xcodeでビルドと下記エラーが、

lPods-Unity-iPhone
lPods-Unity-iPhone

ld: library not found for -lPods-Unity-iPhone clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因は、前の古いバージョンのUnityを使っている時にリンクエラーがでるそうです。。

で解決方法はエラーの通りでございまして、、汗

  • xcode上の General設定の、Linked Frameworks and Libraries から、
  • 「libPods-Unity-iPhone.a」 を frameworkから削除し、ビルドしなおせばOK
-lPods-Unity-iPhone
-lPods-Unity-iPhone

これをdelete!!

そしてリビルド!!!

以上!!!!

Unityで、#UNITY_IOS等の、エディタ上とプラットフォームの判定を勘違いしてた

Unityで、よくAndroidや、iOSの条件分岐かく 「#if UNITY_IOS」等の分岐ですが、

勘違いして使っていました。


#if UNITY_ANDROID Debug.Log("androidだよー"); #elif UNITY_IOS Debug.Log("iosだよー"); #else Debug.Log("unityエディタ含むよー"); #endif

を、Unity上のswitch platformで 『iOS』にしていて、
Unity上で実行したら。。


unityエディタ含むよー

となるとおもっていた。。。汗

違かった。。。

実際は、


iosだよー

と、なった

ほんまアホやった。。


#if UNITY_EDITOR Debug.Log("Unityエディタで実行中だよー"); #elif UNITY_ANDROID Debug.Log("androidだよー"); #elif UNITY_IOS Debug.Log("iosだよー"); #else Debug.Log("その他だよー"); #endif

#if UNITY_EDITOR

これがしたかったやつや。。

さっきのはあくまでswitch platformで指定しているiOSの条件にものでした。。