#author("2016-06-01T00:26:06+00:00","","") #author("2016-06-01T00:26:59+00:00","","") *Cocosの流れをおさらい [#h3472130] &ref(http://static1.squarespace.com/static/52aa8827e4b04dd8c2598a98/t/530180d1e4b06573bf2afb45/1392607465228/default_download.jpg); AndroidのNDKのインストールを行う ↓ ※Windows環境ではPythonを動かすためのパイソンのインストールを先に行う ↓ Setup.pyでCocos2dxのインストールをする ↓ AndroidNDKのパスを記載する ↓ ターゲットになるマシンのプロジェクトを立ち上げる ※apple系はapple系のマシンでしかコンパイルできない ※Windows系はWindowsマシンでしかコンパイルできない ↓ プラットフォームに応じたCocos2Dライブラリをビルドする ↓ 「cocos new プロジェクト名~~~」 をコマンドラインから行う ↓ できたプロジェクトのソースを編集してコンパイルする ↓ Cocos2Dライブラリとリンクする ↓ ターゲットマシンに転送する ↓ 動く ※macでwwindowsは動くが、その逆はできない。ので1つの開発マシンで全ての環境を担おうと思うとmacで開発環境を揃える方がいいような感じ。 *memcpy/memsetが使えない [#h0522743] -Win32環境でコンパイルするとこれらが使えないです(Android-Sudio環境のNDKでは通った)セキュアな関数に移行してしまっているので、こいつらは関数をラッピングシてあげないとプラットフォームごとに#ifdefとかでコードを切り分けることになっちゃうので注意。 *CCLogが使えない? [#db371a2e] -逆にCocosの関数が使えないことにも遭遇。謎、調査中。 -Why CCLog don’t work at cocos2d-win32? [[http://discuss.cocos2d-x.org/t/why-cclog-dont-work-at-cocos2d-win32/691]] ***エディットコンティニュー [#ab94a6fc] デバッグ情報のフォーマットを“Program Database for Edit and Continue (/Zi)”に設定することが必要。 インクリメンタルリンクの有効化に“Yes (/INCREMENTAL)”を設定することが必要。 Debug -> Optionの“Native Edit and Continue”を有効にすることが必要。 ***スプライトにテクスチャを割り当てたい [#k2a5e0c6] これでいいようです。 //Sprite *m_pSpr; m_pSpr->setTexture( CCTexture2D *pTexture ); ***テクスチャをメモリで作りたい [#j96f8327] 256x256でアルファチャンネル付き32bit(4バイト)画像を作る int texLength = 256 * 256 * 4; char *pData = (char*)malloc(texLength); m_pTex = new CCTexture2D(); m_pTex->initWithData(pData, texLength, Texture2D::PixelFormat::RGBA8888, 256, 256, size ); これでinitWithDataしたあとは、テクスチャの中身がCocosの管理下に置かれているようでpDataをfreeしても問題なかった。 もちろんpDataの中身はARGB8888で構成すること。0x80808080だとグレー、0xffffffffだと白になるよ! ***テクスチャを毎フレーム更新できる? [#i7acbed5] pDataの中身を毎フレーム入れ替えても問題なかった。しかし使用メモリが数MB増えた(リークはしていない)のと、FPSが60から55に落ちたのが気になる。 -256x256テクスチャを生成するための26万回のメモリコピーが5FPS落ちる原因だった。 -毎フレームinitWithDataしてもFPSは変わらなかった ***テクスチャの範囲をはみ出した表示はどうなる [#q7a9d94e] -アドレッシングモードにもよるけどデフォルトでクランプモード(最後のピクセルを引きのばす)になった &ref("./clump.png",50%); *C言語の開発で従来のスプライトリクエスト式を実装できるか? [#o88c06f9] **複数のスプライト描画を無限に生成するにはどうすればいいか? [#a18fb5a6] 最終的にはdraw関数で描かれている。ただし、Sceneに登録したスプライトは自動で呼び出されるため。自分でdrawする必要はない。 それをあえて自前でdrawする(Sceneに登録せずに描画する)にはどうすればいいのか?できるのか? ***スプライトはどこで描かれているか? [#g663543b] -同等のスプライトを自前で描画したい時にはdrawを自前で読んでやればいいと思われる。 -ただし、レンダラーと姿勢制御の4x4のマトリックスを作成して引数に加える必要があるので面倒 --やってみたけど失敗した、OpenGLの描画タイミングとあわない感じ。updateでdrawすることになってしまった **では登録したスプライトで弾幕を作るのはどうするか? [#s1ddd1ba] -SpriteBatchを使って表示してみる -SpriteBAtchで毎フレームの最初に持っているchildを全部削除(removeAllChildrenWithCleanup(true)) -そのフレームで必要なスプライトをaddChildすることでどうなるか -表示には成功 ***ブレンドファンクション [#efdc5900] ccBlendFunc blend; blend.src = GL_ONE_MINUS_DST_COLOR; blend.dst = GL_ONE; hoge->setBlendFunc(blend); ||src|dst| |ノーマル|GL_SRC_ALPHA|GL_ONE_MINUS_SRC_ALPHA| |加算|GL_SRC_ALPHA|GL_ONE| |減算|GL_ZERO|GL_ONE_MINUS_SRC_COLOR| |乗算|GL_ZERO|GL_SRC_COLOR| |反転|GL_ONE_MINUS_DST_COLOR|GL_ZERO| |XOR|GL_ONE_MINUS_DST_COLOR|GL_ONE_MINUS_SRC_COLOR| |スクリーン|GL_ONE_MINUS_DST_COLOR|GL_ONE| |加算|GL_SRC_ALPHA|GL_ONE| ***アンカーポイントの原点(anchorPoint) [#k1824283] アンカーポイントの原点は「左下」なんですって。(1.0f,1,0f)で右上になるとのこと これはノードの左下を(0,0)とし、右上を(1,1)としたそのノードの基準点で、デフォルトは中心(0.5 , 0.5)に設定されていま す。 setPositionで設定した位置はこの点の位置が設定されますし、getPositionではこの点の座標が返されます。 2Dベースのライブラリなのに変わった座標系ですね。 2Dベースのライブラリなのに変わった座標系だなぁ